【发布时间】:2019-11-17 03:02:23
【问题描述】:
我将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 中实现的提案。
如果现在两者都没有,我将把这个问题留在这里,以防将来有一天,会有一个。
【问题讨论】:
-
resolve函数没有什么特别之处,它只是一个普通函数。因此,您基本上是在询问是否有一种方法可以判断之前是否调用过函数,而无需将其编码到函数本身中。我不这么认为。 -
@Barmar 是的,我同意你的观点......但是
resolve本身确实保持这样的状态,即如果它已被调用,并且在某种意义上,它有点特别,它是由浏览器实现的。所以我想知道是否有 API 可以为我查询。 -
我建议必须有一种更简单的方法来解决您的问题。这听起来像XY problem。
-
如果你是
f函数的作者,那么当它调用resolve时,你当然可以让它返回true。我在这里想念什么?还是我对您的问题中f的两种不同定义感到困惑? -
“在浏览器中实现”:Promise 规范与浏览器无关。它是原生 EcmaScript 的一部分。