我有以下包含两个 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 秒后出现。有人可以向我解释一下为什么我错了吗?
您传递给
new Promise(...)
的函数会立即被调用。
您传递给
then(...)
的函数会在 Promise 解析后的某个时间被调用(无论您调用 then(...)
时 Promise 是否已经解析)。
调用
then(...)
不会导致传递给 new Promise(...)
的函数被调用(如前所述,这已经发生了)。
两条消息同时出现的原因是因为您将 myPromise2.then 放入 myPromise1.then
这意味着 myPromise2 仅当 myPromise1 被解析时才会执行
如果你希望第二条消息在脚本开始后 9 秒出现,你可以这样写
myPromise1.then((successMessage1) => {
console.log("From Callback " + successMessage1);
return myPromise2;
}).then((successMessage2) => {
console.log("From Callback " + successMessage2);
});