下面的代碼是否可以輸出HERE
?承諾是懶惰評估?
var p = new Promise(() => console.log("HERE"))
(也就是說,不var p = new Promise(fn)
始終執行fn
如果p.then(…)
是從來沒有所謂的做一些事情,結果?)
更具體地說,在服務人員的情況下,如果我叫Cache.delete()
,但從來沒有打電話.then()
關於返回值(或者我扔掉返回值),是否保證刪除緩存條目?
下面的代碼是否可以輸出HERE
?承諾是懶惰評估?
var p = new Promise(() => console.log("HERE"))
(也就是說,不var p = new Promise(fn)
始終執行fn
如果p.then(…)
是從來沒有所謂的做一些事情,結果?)
更具體地說,在服務人員的情況下,如果我叫Cache.delete()
,但從來沒有打電話.then()
關於返回值(或者我扔掉返回值),是否保證刪除緩存條目?
是的,它是有保證的。該specification of Promise
具有該步驟,這將始終進行評估:。
- 令完成是調用(執行者,未定義,«resolvingFunctions [[解決],resolvingFunctions [[拒絕] ]»)。
其中executor
是你通過什麼樣的Promise
構造函數,Call導致代碼正在運行。這一切發生在Promise
甚至返回到您的p
變量之前。
正如詹姆斯說的那樣,保證函數將被調用。雖然這並不能保證緩存條目被刪除!
您必須檢查承諾分辨率的值(如果緩存條目被刪除,則爲true
,否則爲false
)。
啊好點,那就是......不幸的!我想我可以忍受緩存項目不總是被刪除,雖然我不知道如何處理它可能會頻繁發生的可能性。 – mjs
或者簡單地說:傳遞給'Promise'構造函數的executor函數'()=> console.log(「HERE」)總是立即執行。 – ftor
@ LUH3417是的,但OP想知道它是否有保證,因此引用和引用規範,說明它在哪裏以及如何被調用,因此_why_它有保證。 –
沒有冒犯,只是對不熟悉「spec說話」的用戶 – ftor