[英]How promise is resolved by function call?
我發現了這個承諾片段,可以在Promise.race()中使用該片段,以防止等待較長的異步操作(如果我的並行某些代碼完成得更快)。
let stopCallback = null;
const stopPromise = new Promise(x => stopCallback = x);
await stopPromise; // promise pending until stopCallback() will be executed somewhere
但是我無法完全理解此Promise的工作原理。
拜托,有人可以向我解釋這個承諾是如何解決的,或提供任何鏈接到詳細描述這種用例的地方嗎?
海事組織,如果你給x
叫另一個名字,那就更清楚了:
let stopCallback = null;
const stopPromise = new Promise( resolve => stopCallback = resolve);
實際上,無論何時調用stopCallback()
,它都等效於調用resolve()
並解析Promise。
Promise有2個回調函數。 1)解決和2)拒絕
let stopCallback = null;
const stopPromise = new Promise((resolve,reject) => {
// call here resolve or reject ,by this promise exexution will be completed
// resolve('data') or reject('data')
});
(async () => {
const resolvedOrRejectedData = await stopPromise;
})
如果您不解決或拒絕諾言,那么它將保持待處理狀態。
實際上,Promise 只是回調的包裝 。 它可以(或多或少)寫為:
class Promise {
_resolved = undefined;
_handlers = [];
constructor(callback) {
callback(function resolve(value) {
this._resolved = value;
this._handlers.forEach(h => h(value));
}, /*reject*/);
}
then(handler) {
if(this._resolved) handler(this._resolved);
this._handlers.push(handler);
// return new Promise(...);
}
}
所以換句話說:如果您調用promise.then(callback)
則該callback
將存儲在promise中。 然后,當您調用promise的resolve()
時,它將遍歷所有存儲的回調並對其進行調用。
現在await stopPromise;
在該.then(...)
上調用.then(...)
,並將一個內部函數傳遞給它,當被調用時,它將恢復當前async function
的執行。 然后,它停止該功能的執行。 因此,如果您通過回調解決了您的諾言,則會調用所有.then(...)
回調,也將調用在async函數中注冊的回調,然后該回調將繼續執行async function
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.