我有以下 q.all 调用来解决两个承诺。我检查了所有帖子并尝试了所有其他实施方式 q.all 及其相同的情况
var xyzdeffered = $q.defer();
service1.getServiceDetail1($routeParams.id).then(function(promise) {
xyzdeffered.resolve(promise);
});
var abcdeffered = $q.defer();
service2.getServiceDetail2($routeParams.id).then(function(promise) {
abcdeffered.resolve(promise);
});
$q.all([ xyzdeffered, abcdeffered ]).then(function(data) {
$scope.variable = data;
});
我期望 q.all 中的变量只有在前两个承诺得到解决后才会被填充。但不幸的是,服务调用本身没有返回数据,控制权转移到 q.all。我觉得这很奇怪,因为根据文档,只有当您的承诺返回 200 响应并得到解决时,才会调用 q.all 。
我检查了对网络调用的分析,并放置了一些警报来查看代码的顺序,发现 q.all 警报是第一个弹出的警报,然后其他承诺得到解决。
这真的让我很生气,因为为什么 q.all 的简单实现不起作用。
任何帮助将不胜感激。
为什么不直接在第一个承诺上调用 $q.all ?
$q.all([
service1.getServiceDetail1($routeParams.id),
service2.getServiceDetail2($routeParams.id)
]).then(function(data) {
//Array of result [resultOfgetServiceDetails1, resultOfgetServiceDetails2]
$scope.variable = data;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)