Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript变量在promise.all中未定义_Javascript_Node.js_Amazon Web Services_Promise_Amazon Elastic Beanstalk - Fatal编程技术网

Javascript变量在promise.all中未定义

Javascript变量在promise.all中未定义,javascript,node.js,amazon-web-services,promise,amazon-elastic-beanstalk,Javascript,Node.js,Amazon Web Services,Promise,Amazon Elastic Beanstalk,我有一个Node.js应用程序,它将外部CRM中的客户端数据同步到by applications数据库中 该应用程序每半小时触发一个CRON作业,并基本上通过CRM的API读取客户机数据。此“同步”代码必须进行大量调用才能收集所需的所有数据 对API的调用使用Promission进行,通常使用Promission.all函数在异步manor中执行多个Promission 我的代码的简化部分如下所示。promise.all方法用于为数据库中的每个客户端调用processReferrals方法 re

我有一个Node.js应用程序,它将外部CRM中的客户端数据同步到by applications数据库中

该应用程序每半小时触发一个CRON作业,并基本上通过CRM的API读取客户机数据。此“同步”代码必须进行大量调用才能收集所需的所有数据

对API的调用使用Promission进行,通常使用Promission.all函数在异步manor中执行多个Promission

我的代码的简化部分如下所示。promise.all方法用于为数据库中的每个客户端调用processReferrals方法

return db.entities.clients.findAll({ where: {company: company.id}}).then((theClients) => {

        var changes = [];

          var rPromises = [];

          theClients.forEach(client => {
            rPromises.push(CharityLogService.processReferrals(client,company));
          });
          return Promise.all(rPromises).then((values) => {
            values.forEach(v => {
              changes.push(v);
            });
            return changes;
          });
      })
      .catch(function (err) {
          return [];
      });
processReferrals方法本身然后调用外部API以返回“referral”数据。每个引用都有多个“操作”,所以这个方法也有对另一个方法的嵌套调用,同样是通过Promises.all

processReferrals: function(client,company) {

  var options = {
  uri: "https://externalapi.com/getclientreferrals" + client.id,
  headers: {
    'company': company.id
  },
  json: true
  };

  var actionPromises = [];

  return server.httprequest(options)
  .then(function (referrals) {

  referrals.forEach(referral => {

    actionPromises.push(Service.ActionPromiseMethod(referral.id,company));
  })

  return Promise.all(actionPromises).then((actiondata) => {
        return actiondata;
      });
})
.catch(function (err) {

  console.log('ERROR: api fail error: " + err);

  var changes = {};
  return new Promise((resolve, reject) => {
    changes.clientId = client.id;

    console.log("returning changes API FAIL..");
    resolve(changes);
  });

});
}
这种方法在具有相当少量数据的开发环境中运行良好。然而,当它被部署到一个包含大量数据(以及随后大量API调用)的实时环境中时,我遇到了一些问题

代码似乎间歇性地工作,成功地为一些客户端返回数据,然后失败,为其他客户端返回以下错误消息

错误:api失败错误:未定义客户端

我有点困惑客户机对象如何在这里变得未定义

我正在AWS Elastic Beanstalk(EC2)上托管我的应用程序。我不完全确定这是一个代码问题,因为结果是间歇性的,并且在开发环境中是100%成功的

由于需要在实时环境中进行大量调用,我的AWS实例是否需要升级


这里的任何指针都很好。

为什么要使用
.forEach
。通过使用
.map
,您可以大大简化代码。
承诺。所有
结果不需要映射,您可以直接返回它。请整理代码并使用
.map
至于错误,
客户端未定义
并不意味着客户端是
未定义
,而是它未声明。。。。检查您是否尝试访问
服务中的
客户端
。ActionPromiseMethod
谢谢您的评论。我同意。map可以在我的代码中的一些地方使用。但是,它仍然不是未声明的“客户端”变量问题的原因。实际上,我没有在Service.ActionPromiseMethod方法中的任何地方使用“client”变量,因此我对错误消息感到困惑。