Promise解决方案是在承诺创建的那一刻开始的吗?

时间:2018-02-22 11:03:45

标签: javascript node.js promise es6-promise

在下面的代码中,我注意到在调用getProm()的那一刻,承诺开始得到解决(我注意到运行代码时延迟了5秒)。

我想确认承诺是在创建时立即解决还是仅在以下2种情况下解决。 1)只有当我们明确地做Promise.resolve时才会解决承诺2)我们使用.then关键字

function getProm(){
    var prom1 = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve("Promise is resolved")
        },5000)
    })
    return prom1
}
var mypromise = getProm()

1 个答案:

答案 0 :(得分:1)

有三个时刻需要区分:

  • 调用回调的那一刻,你传递给new Promise:所谓的promise构造函数回调。这是立即的:它将在new Promise表达式之后的任何其他代码之前执行。在您的情况下,这意味着setTimeout会立即执行。

  • 承诺解决的那一刻。当调用提供给promise构造函数回调的resolvereject函数时,会发生这种情况。在你的情况下,这发生在延迟5秒后。

  • 检测已解决的承诺。这总是异步发生:使用ES6承诺无法检测到promise已同步解决,即使代码无延迟地调用resolve。您使用then回调(或await)检测分辨率。在当前调用堆栈运行完成并清空之前,不会调用此回调。无论您是否检测到此类分辨率,这都不会延迟承诺的实际解决方案。如果你在延迟10分钟后执行then,它将在下一个微任务中触发then回调,即使承诺早已解决了。您可以对同一个承诺进行多次then次呼叫:它们都会触发回调。