【发布时间】:2015-08-10 22:13:24
【问题描述】:
我需要创建一个 JavaScript Promise,它在特定条件为真之前不会解析。假设我有一个 3rd 方库,我需要等到该库中存在某个数据条件。
我感兴趣的场景是,除了简单的轮询之外,无法知道何时满足此条件。
我可以创建一个等待它的承诺 - 这段代码有效,但有没有更好或更简洁的方法来解决这个问题?
function ensureFooIsSet() {
return new Promise(function (resolve, reject) {
waitForFoo(resolve);
});
}
function waitForFoo(resolve) {
if (!lib.foo) {
setTimeout(waitForFoo.bind(this, resolve), 30);
} else {
resolve();
}
}
用法:
ensureFooIsSet().then(function(){
...
});
我通常会设置一个最长轮询时间,但不希望这会影响这里的问题。
【问题讨论】:
-
这看起来不错。您实际上并不需要使用 waitForFoo 污染外部范围,但它是一个细节并且取决于其余代码。您使用的是原生承诺还是特定的库?
-
同意 - 这只是整体代码的 sn-p。这将使用原生 Promise。我已经提出过一两次这种模式,并且对是否有更好的方法来构建它感兴趣。
-
一个更简单的方法是 Object.observe 库对象
-
@BenjaminGruenbaum,非常好。我希望有这样的东西。根据浏览器的要求,我可能无法使用它,但这是一个很好的提示。
-
好吧,然后在旧浏览器中填充它。
标签: javascript promise