了解 Javascript Promise 执行

问题描述 投票:0回答:2

我有以下包含两个 Javascript Promise 的代码:

let myPromise1 = new Promise((resolve,reject) => {
    setTimeout(() => {
      resolve("Promise 1 resolved")
    },6000)})
let myPromise2 = new Promise((resolve,reject) => {
    setTimeout(() => {
      resolve("Promise 2 resolved")
    },3000)})
myPromise1.then((successMessage) => {
    console.log("From Callback " + successMessage)
    myPromise2.then((successMessage) => {
        console.log("From Callback " + successMessage)
    })
})

当我运行脚本时,两条消息同时出现,即执行脚本 6 秒后。但我认为在

myPromise2
解决之前
myPromise1
不会被执行,所以我预计第二条消息会在 6 + 3 = 9 秒后出现。有人可以向我解释一下为什么我错了吗?

javascript es6-promise
2个回答
0
投票

您传递给

new Promise(...)
的函数会立即被调用。

您传递给

then(...)
的函数会在 Promise 解析后的某个时间被调用(无论您调用
then(...)
时 Promise 是否已经解析)。

调用

then(...)
不会导致传递给
new Promise(...)
的函数被调用(如前所述,这已经发生了)。


0
投票

两条消息同时出现的原因是因为您将 myPromise2.then 放入 myPromise1.then

这意味着 myPromise2 仅当 myPromise1 被解析时才会执行

如果你希望第二条消息在脚本开始后 9 秒出现,你可以这样写

myPromise1.then((successMessage1) => {
    console.log("From Callback " + successMessage1);
    return myPromise2; 
}).then((successMessage2) => {
    console.log("From Callback " + successMessage2);
});
© www.soinside.com 2019 - 2024. All rights reserved.