簡體   English   中英

有沒有辦法知道是否已經調用了`resolve`函數

[英]Is there a way to know if a `resolve` function has been called

我將resolve函數作為參數傳遞,我必須知道它是否在某個地方被調用過。 我想知道是否有一個函數可以幫我做到這一點,而不是手動維護狀態。

const p = new Promise((resolve, reject) => {
  f(resolve)
  g(resolve)
}

如果在f調用了resolve,則g應該具有不同的行為,例如

const arr = [1,2,3]
const g = resolve => {
  if(resolve has been called) {
    do nothing 
  } else {
    const el = arr.pop()
    resolve(el)
  }
}

我想要一個函數f(resolve) == true|false


我知道還沒有像這樣的標准函數,因為它未包含在Promise規范中。 因此,我要求一個已在瀏覽器或polyfill中實現的提案。

如果不是現在都這樣做,我將在這里留下這個問題,以防將來有一天會出現一個問題。

您可以創建一個跟蹤調用的包裝函數:

const p = new Promise((resolve, reject) => {
    const resolveContext = {
        didResolve: false
    };
    const wrappedResolve = (...args) => {
        resolveContext.didResolve = true;
        resolve(...args)
    };
    wrappedResolve.context = resolveContext;
    f(wrappedResolve)
    g(wrappedResolve)
}

現在您的g函數可以訪問wrappedResolve.context.didResolve

暫無
暫無

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

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