我有一個需要使用不同值進行克隆的對象數組。如何在for循環後返回單個promise,其中循環內數組的每個元素都執行多個異步調用
在準備主要修改的對象數組後,我會從每個承諾中獲得這些值,我將不得不保存這些值。所以我很多人需要這個作爲一個單一的承諾。
我不知道該怎麼做。
下面是我們需要克隆oldUser數據的示例。說老用戶的信用評分= 100;但對於新用戶,默認信用將由系統隨機創建。
對於用戶陣列中的每個用戶,很少的細節必須使用異步調用進行更新。 這是要求
function getUserCreditScore(user){
var url = '/someurl';
return $http.get(url).then(function(res){
user.creditScore = (res.data) ? res.data : 0;
});
}
function getUserRecomandations(user){
var url = '/someurl';
return $http.get(url).then(function(res){
user.recommendation = (res.data) ? res.data : 'basic recommendation';
});
}
function getUserHelpInfo(user){
var url = '/someurl';
return $http.get(url).then(function(res){
user.helpInfo = (res.data) ? res.data : 'Help Info';
});
}
function clone(){
var newUsers = angular.copy(oldUsers);
for (var i=0; i<newUsers.length; i++){
newUsers[i].id = undefined;
getUserCreditScore(newUsers[i]);
getUserRecommendation(newUsers[i]);
getUserHelpInfo(newUsers[i]);
}
var promises = _.map(newUsers, user => user.save());
$q.all(promises).then(function (data) {
console.log(data);
}
}
你需要等待通過'getCreditScore返回的承諾(newusers使用[1]);'...還有,你的'功能getCreditScore(用戶){'從來沒有使用用戶的說法?所以很難知道你正在嘗試做什麼 –
我的不好getCreditScore看起來像下面 函數getCreditScore(用戶){ var url ='/ someurl'; 返回$ http.get(url).then(function(res){user.creditScore =(res.data)?res.data:0; }); } – user3741852