簡體   English   中英

調用不同的解析時執行關於promise的順序

[英]executing order about promise when different resolve is invoked

我對Promise中的resolve感到困惑。

resolve之前援引innerResolve ,但為什么“無極內再執行”前鍍鉻控制台“無極然后執行”記錄。

我認為可能是:

當Promise的狀態為PENDING時,調用resolve會將狀態設置為FULFILLED, then調用方法時,作業將排隊到jobQueue中。 innerPromise.then被調用,因此作業首先進入隊列。

這個問題有規范的解釋嗎?

這是我的代碼:

console.log("main start")
new Promise(resolve =>{
  new Promise(innerResolve =>{
    resolve()
    console.log("resove is called")
    innerResolve()
    console.log("innerResolve is called")
  }).then(() => {
    console.log('inner Promise then execute')
  })
}).then(() => {
    console.log('Promise then execute');
})
console.log("main end")

resolve()不調用then方法。 在下一個滴答之后,將對then方法進行排隊的是resolve()調用,因此整個內部promise解析器將在內部then方法之前立即執行,然后在外部then方法上按該順序調用下一個刻度,因為內部承諾在外部承諾被鏈接之前在外部承諾內部被同步鏈接。

我又添加了兩個日志來幫助闡明為何then方法的順序與您期望的不同:

 console.log("main start") new Promise(resolve =>{ console.log("outer resolver execute") new Promise(innerResolve =>{ resolve() console.log("resove is called") innerResolve() console.log("innerResolve is called") }).then(() => { console.log("inner Promise then execute") }) console.log("inner promise chained") }).then(() => { console.log("Promise then execute"); }) console.log("main end") 

由於它們位於單個堆棧框架中,因此會調用bot resolve

resolve()
console.log("resove is called")
innerResolve()
console.log("innerResolve is called")

一旦完成,事件循環將檢查承諾是否已解決,並執行所有已完成的承諾,因為這兩個都已完成。 它可能會調用其中的任何一個,具體取決於編譯器。 試試下面的例子

 console.log("main start") new Promise(resolve =>{ new Promise(innerResolve =>{ resolve() console.log("resove is called") setTimeout(innerResolve, 1000); console.log("innerResolve is called") }).then(() => { console.log('inner Promise then execute') }) }).then(() => { console.log('Promise then execute'); }) console.log("main end") 

由於innerResolve稍后執行,因此then()稍后被調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM