有没有办法知道是否已经调用了`resolve`函数

时间:2019-07-07 08:50:24

标签: javascript es6-promise

我将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中实现的提案。

如果现在都不是,那么我将在这里保留这个问题,以防将来有一天出现。

1 个答案:

答案 0 :(得分:0)

您可以创建一个跟踪调用的包装函数:

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