我有一个代码部分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);
});
知道为什么会这样吗?感谢。
答案 0 :(得分:3)
这是因为在你的第二个例子中,你是立即调用它。
setTimeout(reject('error'), 5000);
实质上是使用调用reject('error')的结果作为setTimeout的第一个参数。
答案 1 :(得分:0)
()=>reject('error')
和reject('error')
完全不同。在这种情况下,第一个语法相当于function(){ reject('error')}
,而调用reject('error')
而不将其包装在回调中将立即调用该函数。