尝试发送 angular 动态承诺数组到快递服务器
Trying to send angular dynamic array of promises to express server
我正在尝试向 Express 应用程序发送一组承诺,以从 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
});
}
原因是因为你一直在修改 payload 参数,它是一个对象,因此通过引用传递,所以每次你改变它都会修改它的所有引用,包括那些已经添加到承诺数组中的引用。
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
});
}
我正在尝试向 Express 应用程序发送一组承诺,以从 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
});
}
原因是因为你一直在修改 payload 参数,它是一个对象,因此通过引用传递,所以每次你改变它都会修改它的所有引用,包括那些已经添加到承诺数组中的引用。
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
});
}