2015-05-21 44 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