我不知道 如何正确地将资源中返回的数据添加到promise数组中。当我将它记录到控制台时,它是空的。
这是我的代码:
var d = $q.defer();
var promises = [];
_.each(recipe.credentials, function(credential) {
APIService.save({route:'credential'},credential).$promise.then(function(data) {
promises.push(data)
});
});
$q.all(promises).then(function(data) {
console.log(data);
d.resolve();
});
return d.promise;
更新代码:
var d = $q.defer();
var promises = recipe.credentials.map(function(credential) {
return APIService.save({route:'credential'},credential).$promise;
});
return $q.all(promises)
答案 0 :(得分:2)
你应该在创建时包装promises,并且不要忘记.catch
处理程序:
$q.all(recipe.credentials.map(function(credential) {
return APIService.save({route:'credential'},credential).$promise;
})).then(function(data) {
console.log(data);
}).catch(function(reason) {
console.log(reason);
});
此外,很可能不需要创建另一个延迟 - 只需将$q.all
的结果返回到外部世界。
P.S。我强烈建议您阅读有关承诺及其用法的this article。 )