试图发送angular动态承诺数组来表示服务器
Trying to send angular dynamic array of promises to express server
我试图发送一个数组的承诺,以快速应用程序从mongo数据库获取数据。它似乎在前端表现正确。在本例中,两个对象都被发送到服务器,并使用$q.all进行解析。但是当我调试服务器时,我看到两个对象是相同的。在这种情况下,它是payload2的最后一个承诺,被解析了2次。如果我添加更多的承诺,正确的数字会被解析,但它们都是数组中最后一个对象的值。
var promises = logCspItemInventoryStatus(payload,result.cspItems);
return $q.all(promises)
.then(function(result){
toastr.success('Items have been logged');
})
.catch(function(err){
toastr.error(err);
})
var logCspItemInventoryStatus = function (payload,cspItems) {
var promises = [];
angular.forEach(cspItems, function(item){
//I am appending payload with items
payload.qty=item.checking;
payload.description=item.description;
//payload 1 {docId: "55c124f7485684e81d6181fc", by: "Foo Bar", checkIn: false, qty: 2, description: "car"}
//payload 2 {docId: "55c124f7485684e81d6181fc", by: "Foo2 Bar2", checkIn: false, qty: 1, description: "hall"}
var p = checkOutCspItem(payload);
promises.push(p);
});
return promises;
};
//returns a promise
var checkOutData = function(payload) {
return Csp.update(payload).$promise.then(function(result) {
return result.data
});
}
原因是您一直在修改有效载荷参数,它是一个对象,因此通过引用传递,所以每次更改它时,它都会修改它的所有引用,包括那些已经添加到承诺数组的引用。
var promises = logCspItemInventoryStatus(payload,result.cspItems);
return $q.all(promises)
.then(function(result){
toastr.success('Items have been logged');
})
.catch(function(err){
toastr.error(err);
})
var logCspItemInventoryStatus = function (payload,cspItems) {
var promises = [];
angular.forEach(cspItems, function(item){
//I am appending payload with items
var payloadCopy = angular.copy(payload);
payloadCopy.qty=item.checking;
payloadCopy.description=item.description;
//payload 1 {docId: "55c124f7485684e81d6181fc", by: "Foo Bar", checkIn: false, qty: 2, description: "car"}
//payload 2 {docId: "55c124f7485684e81d6181fc", by: "Foo2 Bar2", checkIn: false, qty: 1, description: "hall"}
var p = checkOutCspItem(payloadCopy);
promises.push(p);
});
return promises;
};
//returns a promise
var checkOutData = function(payload) {
return Csp.update(payload).$promise.then(function(result) {
return result.data
});
}
相关文章:
- 如何避免“;使用数组文字表示法“;以下javascript代码中的jslint错误
- 如何在ember数据模型中表示数组
- 使用数组表示法对多个字段执行jQuery日期选择器
- 如何使用不可变表示此数组重新排序示例
- 数组表示形式内的字符串IndexOf
- 由数组数组表示的表;不起作用
- 使用来自 JSON 对象的数组表示法进行多级属性检索
- 数组表示法操作顺序
- 用 JS 数组表示不确定大小的 2d 空间 - 负索引
- 将字符串数组表示形式转换回数组
- 为什么使用数组表示法而不是点表示法来检查变量是否存在
- 在webpack中创建多个块时,数组表示法和对象表示法之间的区别是什么
- 使用[]数组表示法访问属性
- 传递函数作为参数-数组表示法
- 我应该在Angular中使用数组表示法吗
- 如何在JavaScript中比较两个数组,并返回一个新的数组表示匹配
- 知道何时使用数组表示法将属性设置为对象
- 数组表示null,即使正在设置索引
- 如何选中由二维数组表示的所有复选框
- 在javascript中使用数组表示法给子对象字段赋值