当使用$ q.all()获得多个响应时,我在响应对象中获得了相同的值。我得到的对象与承诺的声明一样多,但是所有的“名称”字段都具有相同的值(最后一个为3)。
.controller('myCtrl', function ($scope, $state, $q, myService) {
$scope.myList = [];
$scope.create = function() {
var newObject;
var promises = [];
for(var i = 0; i < 4; i++){
newObject = { name: i };
promises[i] = myService.create(newObject);
}
$q.all(promises).then(
function (response) {
$scope.myList = response;
}
);
};
}
这是我的服务:
.service('myService', function ($http, $q, baseURL) {
this.create = function(object) {
var deferred = $q.defer();
//console.log shows that object still has the proper 'name' value
$http.post(url, object).then(
function (response) {
// console.log shows that all response objects have the same 'name' value.
deferred.resolve(response);
}
);
return deferred.promise;
};
}
感谢任何输入,因为这是我在Angular中实现诺言的第一种方法。
在重新声明变量时,通过在循环内移动newObject声明来解决此问题,promise会将其先前值的副本保留给自己。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句