使用 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')
而不将其包装在回调中将立即调用该函数。
我有一段代码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')
而不将其包装在回调中将立即调用该函数。