【发布时间】:2014-10-17 00:06:47
【问题描述】:
我需要对 Angular 资源进行多个并发调用,并使用 $promise api 链接一些操作。
我这样定义一个资源
myServicesModule.factory('MyResource', ['$resource', 'SETTINGS', function($resource, SETTINGS) {
return $resource(SETTINGS.serverUrl + '/myResource/:id', { },
{
get: { method: "get", url: SETTINGS.serverUrl + '/myResource/show/:id' },
}
);
}]);
我的控制器需要检索多条记录,并在记录准备好时对每条记录执行操作。我无法将值传递给 then() 闭包。
当我这样做时:
for (var i = 0; i < 3; i++) {
MyResource.get({id: i}).$promise.then(function(item) { console.log(i); });
}
输出为“2, 2, 2”。
此代码导致所需的输出“0, 1, 2”(顺序取决于每个资源调用完成的时间),但这是一个丑陋的解决方案。
for (var i = 0; i < 3; i++) {
var closure = function(i) {
return function(item) { console.log(i); console.log(item); }
}
UwgCarrier.get({id: i}).$promise.then( closure(i) );
}
为什么第一个代码 sn -p 返回 "2, 2, 2" ?
有没有更简洁的方法来解决这个问题?
【问题讨论】:
标签: angularjs angular-resource angular-promise