我如何比较这些不同电话的结果? url和水果列表存储在不同的json文件中,我会在将它们作为承诺发送之前对它们进行比较。他们应该相互等待,并在共同的承诺中实现。
angular.module('myApp', ['ngResource'])
.controller('MainCtrl', function($scope, $http, $resource) {
var list = {};
$http.get('images.json').then(function(response) {
response.data.objects.forEach(function(images) {
list[images.id] = images.url;
});
});
$resource('fruits.json').get().$promise.then(function(response) {
var list = {
1: 'badUrlExampleForApple',
2: 'badUrlExampleForOrange',
3: 'badUrlExampleForPineapple'
}
response.objects.forEach(function(product) {
if (list[product.id]) {
console.log(product.name + ': ' + list[product.id]);
}
});
});
});
我知道它有点奇怪,但我必须这样做。
Plunker示例:http://plnkr.co/edit/ICwvYI?p=preview
非常感谢任何帮助!
答案 0 :(得分:2)
您使用$q.all
来获得.then
展开其中两者的承诺:
var images = $http.get('images.json');
var fruits = $resource('fruits.json').get().$promise;
$q.all([images,fruits]).then(function(results){
var images = results[0];
var fruits = results[1];
// access to both here, you can compare anything you want
});
$q.all
指南说:
将多个promises组合成一个promise,当所有输入promise都被解析时解析。
在蓝鸟和ES6承诺等其他承诺库中,thatr功能可能是Promise.all
,在原始Q中Q.all
。