【问题标题】:Use setTimeout to resolve or reject a promise使用 setTimeout 解决或拒绝承诺
【发布时间】:2016-12-01 04:44:15
【问题描述】:

我有一个代码段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);
});

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

【问题讨论】:

    标签: javascript promise settimeout es6-promise


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 2018-11-17
        • 2018-05-11
        • 2020-02-18
        • 1970-01-01
        相关资源
        最近更新 更多