使用setTimeout解析或拒绝承诺

时间:2016-12-01 04:44:16

标签: javascript promise settimeout es6-promise

我有一个代码部分https://jsfiddle.net/h3m10005/

let p = new Promise((resolve, reject) =>{
     setTimeout(()=>reject('error'), 5000);
});

p.then(null,(err)=>{
     console.log(err);
});

执行上述代码部分后,大约5秒钟后,我会看到error已打印出来。但是,如果我不在函数中包装reject()调用,控制台会立即输出error。例如,

let p = new Promise((resolve, reject) =>{
         setTimeout(reject('error'), 5000);
});

p.then(null,(err)=>{
         console.log(err);
});

知道为什么会这样吗?感谢。

2 个答案:

答案 0 :(得分:3)

这是因为在你的第二个例子中,你是立即调用它。

setTimeout(reject('error'), 5000);

实质上是使用调用reject('error')的结果作为setTimeout的第一个参数。

答案 1 :(得分:0)

()=>reject('error')reject('error')完全不同。在这种情况下,第一个语法相当于function(){ reject('error')},而调用reject('error')而不将其包装在回调中将立即调用该函数。