【发布时间】:2017-04-03 14:03:06
【问题描述】:
我正在编写一个 Angular 服务来进行一些 http 调用。 代码是这样的。
this.checkAndSendNotifications = function() {
UsersService.getArray(function(array) {
var notifications = [];
angular.forEach(array, function(element) {
if (some conditions is true) {
srv.sendNotificationToToken(element.id,
function() {
notifications.push({
id: user.id,
errorStatus: null,
errorStatusText: null
});
},
function(error) {
notifications.push({
id: user.id,
errorStatus: error.status,
errorStatusText: error.statusText
});
});
}
});
printNotificationsStatus(notifications);
});
};
this.sendNotificationToToken = function(id, onSuccess, onError) {
$http({
method: 'POST',
url: 'https://url....',
headers: {
'Authorization': 'Bearer ....',
'Content-Type': 'application/json'
},
data: {
"id": id,
"message": "hello"
}
}).then(function successCallback(response) {
onSuccess();
}, function errorCallback(error) {
onError(error)
});
};
我只需要在所有 api 调用结束时调用 printNotificationsStatus() 函数,以确保所有 api 响应,但现在该函数在 angular.forEach 执行结束时调用,API 的承诺可以稍后解决因为它们是异步的。
有没有办法等待?
提前致谢 大卫
【问题讨论】:
-
看看
$q.all([promises...])docs.angularjs.org/api/ng/service/$q#all。你需要你的服务返回一个承诺,这样你就可以将它们推送到一个数组中。 -
Bruno 和 cesaregb 注意到我在 printNotificationsStatus 位置上犯了一个错误……坦克
标签: javascript angularjs api asynchronous promise