【发布时间】:2016-09-01 17:50:15
【问题描述】:
我有一个 javascript 类,它当前进行一些异步调用,将元素添加到 DOM,然后调用用户回调。像这样的:
api.load = function() {
if (api.loading || api.loaded)
return;
api.loading = true;
makeAsyncCalls(); // will set api.loaded = true and run all pendingReady
}
api.ready = function(callback) {
if (!api.loaded) {
pendingReady.push(callback);
}
callback(someValue);
}
这让我可以处理对load 和ready 的多个调用。
我现在正在尝试更新它以使用 javascripts Promise。上面的代码会变成这样:
api.load = function() {
if (api.loaded) {
// callers attached .then() will still fire
return Promise.resolve(someValue);
}
if (api.loading) {
// Not sure how to handle this
}
api.loading = true;
return makeAsyncCalls(); // Which returns a Promise
}
我不知道如何处理第一个 Promise 已启动但尚未完全加载的情况(在 promise 演讲中解决)。我能想到的唯一方法是返回一个包含对setInterval 检查状态的调用的 Promise。当然有更好的方法。有什么建议吗?
为了更清楚地说明这一点。对api.load 的每次调用都必须返回Promise 或thenable。第一次调用将启动异步方法。进一步的调用需要返回一个 Promise,它只能在初始的 Promise 完成后解决或拒绝。
只有在没有向成功处理程序传递任何值的情况下,链式 Promise 才会起作用(第一个 .then() 可能不会返回相同的值)。
【问题讨论】:
标签: javascript asynchronous promise queue