2015-05-21 16 views
1

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

不知道...但它适用于.save! – nofear87

+1

忘记创建延迟对象,只是'返回$ q.all(...'。如果您希望在外部访问它,您可能还想在'then'处理程序中返回数据' – Phil

回答

2

你应该换行承诺在创建时,也不要忘了.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以了解承诺和使用情况。 )

+0

不知道是谁downvoted你,但他们错了 – Phil

+0

也许这是你的whacky括号/括号/换行样式;) – Phil

+0

那么,这只是例如。我发现区分mapper函数和回调函数(提供在'.then'中)更容易。但无论如何,以更简单的方式重写了它。 ) – raina77ow