使用$ q.all链接API调用

时间:2015-05-21 10:16:05

标签: angularjs

我不知道  如何正确地将资源中返回的数据添加到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)

1 个答案:

答案 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。 )