使用 setTimeout 解决或拒绝承诺

Use setTimeout to resolve or reject a 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);
});

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

这是因为在您的第二个示例中,您立即调用了它。

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

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

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