试图发送angular动态承诺数组来表示服务器

Trying to send angular dynamic array of promises to express server

本文关键字:数组 表示 服务器 承诺 动态 angular      更新时间:2023-09-26

我试图发送一个数组的承诺,以快速应用程序从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
   });
  }