从多个承诺
问题描述:
我总是在控制台看到如何回报承诺风趣h动车组承诺:从多个承诺
var _addOrDeleteUser = function (userId, addToProjects, removeFromProjects) {
var deferred = $q.defer();
var promises = [];
promises.push(projectResource.addUserToProjects({ userId: userId }, addToProjects, function (result) {
console.log("addUserToProjects");
deferred.resolve();
return result;
}));
promises.push(projectResource.deleteUserFromProjects({ userId: userId }, removeFromProjects, function (result) {
console.log("deleteUserFromProjects");
deferred.resolve();
return result;
}));
return $q.all(promises);
}
答
您可以使用链接的承诺为 -
travelService
.getDeparture(user) // Request #1
.then(function(departure){
$scope.departure = departure; // Response Handler #1
return travelService.getFlight(departure.flightID); // Request #2
})
.then(function(flight){
$scope.flight = flight; // Response Handler #2
return weatherService.getForecast($scope.departure.date); // Request #3
})
.then(function(weather){
$scope.weather = weather; // Response Handler #3
});
有关详细信息参见this
+0
如果我正确地理解了这个问题,我认为你的承诺链示例是正确的方法。 – stanleyxu2005
+0
正如我所理解的问题一样,OP在想为什么“teamsUpdated2”首先被记录下来,尽管在其他两个承诺都解决后它应该被链接。 –
+0
谢谢@ stanleyxu2005 –
你能提供这两种方法的内容,以及好吗? 'projectResource.addUserToProjects'和'projectResource.deleteUserFromProjects' –
另外,你的'deferred'似乎什么都不做 - 你可以删除'var deferred = $ q.defer();'和那两个'deferred'的行。 resolve();' –
你确定函数'addUserToProjects'和'deleteUserFromProjects'返回一个promise吗?附: https://jsfiddle.net/hLk0oruy/ –