簡體   English   中英

如何通過函數調用解決承諾?

[英]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.

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