我将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中实现的提案。
如果现在都不是,那么我将在这里保留这个问题,以防将来有一天出现。
答案 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