【发布时间】:2016-10-26 15:32:55
【问题描述】:
我正在使用 Google Analytics Management API for JavaScript 访问 Google Analytics。
我正在努力实现以下目标:
- 从所有帐户(ID 数组)加载过滤器。
- 删除所有已加载的过滤器(从已加载的帐户中)。
- 完成所有删除操作后:向所有帐户添加新过滤器。
- 所有添加操作完成后:显示完成消息。
我在第 3 点和第 4 点遇到了麻烦。我无法等待承诺列表完成后再做任何进一步的事情。
半伪代码如下,我没有waitForAllPromises(listOfPromises):)
var promises = [];
for(accountId in accountIds) {
(function(accountId){
promise =
loadAccountFilters(accountId) // returns gapi.client.analytics....then()
.then(function(){
deleteAccountFilters(accountId); // returns gapi.client.analytics....then()
});
promises.push(promise);
})(accountId);
}
waitForAllPromises(promises)
.then(function(){
console.log('All delete operation done.');
var promises = [];
for(accountId in accountIds) {
(function(accountId){
promise = addNewFilters(accountId); // returns gapi.client.analytics....then()
})(accountId);
}
promises.push(promise);
waitForAllPromises(promises)
.then(function(){
console.log('All add operation done.');
});
});
我只能访问 Google 客户端库和 jQuery,但似乎来自 jQuery 的 $.when.apply($,promises).then(...) 可以等待所有承诺解决,不适用于 GCL 承诺对象。
【问题讨论】:
-
可以“$http.pendingRequests.length !== 0;”帮助你检查是否所有的承诺都返回了?
-
也许您正在寻找batch request?或者,在单个 promise 上调用
$.when(promise)应该创建一个与$.when数组调用兼容的 jQuery deferred。 -
$.when(googleRequestPromise)不像 jQueryPromise 那样工作。至少我不能让它工作。我没有让batch request处理嵌套的.then调用,例如.req.then(...).then( ...req2.then()... )。
标签: javascript jquery angularjs promise google-analytics-api