node.js - 等待 promise - NodeJs

标签 node.js undefined

我正在尝试为变量 myleadId 赋值取决于 leadId.length . 目标是 myleadId此步骤后将有一个值以继续下一步。问题是 myleadIdundefined什么时候leadId.length <= 0 (其他条件)。

app.post('/sendMessage2agent', async (req, res) => {
  getEnterpriseIDbyContact(req.body.recipient, knex).then((enterpriseId) => {
    getLeadIDbyContact(req.body.sender, knex).then((leadId) => {
      var myleadId;
      if (leadId.length > 0) {                  
        myleadId = leadId;  //works great!
      } else {
        getChannelIdByName(req.body.channel, knex).then((channelId) => {        
          return createLeadOnEnterprise(req.body.sender, enterpriseId, channelId, knex).then((newleadId) => {       
            console.log('newleadId: ' + newleadId); //newleadId is 5
            myleadId = [{'id': newleadId}]; //doesn't work :(
            return;
          });                               
        });                 
      }                         
    
      console.log('myleadId: ' + JSON.stringify(myleadId)); // myleadId is undefined when leadId.length>0 is false. I expect myleadId=[{'id': 5}]
    });     

    res.json(req.body);
  });
});

最佳答案

问题是您没有等待您的 promise 。这样他们将在与您的 console.log 不同的时间完成。您还应该看到消息 myleadId: ... 出现在控制台中的 newleadId: ... 之前。这是因为 promise 是异步执行的。所以他们让其他代码在他们执行的时候继续执行。为确保在继续执行主函数之前等待 promise ,您应该使用 await。有了它,您还可以删除 .then 回调以提高可读性。

app.post('/sendMessage2agent', async (req, res) => {
  const enterpriseId = await getEnterpriseIDbyContact(req.body.recipient, knex);
  const leadId = await getLeadIDbyContact(req.body.sender, knex);
  let myleadId;
  if (leadId.length > 0) {                   
    myleadId = leadId;
  } else {
    const channelId = await getChannelIdByName(req.body.channel, knex);
    const newleadId = await createLeadOnEnterprise(req.body.sender, enterpriseId, channelId, knex);  
    console.log('newleadId: ' + newleadId);
    myleadId = [{'id': newleadId}];
  }                           
  
  console.log('myleadId: ' + JSON.stringify(myleadId));
      
  res.json(req.body);
});

关于node.js - 等待 promise - NodeJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69142315/

相关文章:

node.js - AWS CDK以及如何在不卡住的情况下更新ECS

node.js - Node.js 中的 XML 到 PEM

javascript - Node-Webkit 从 avi 文件路径获取视频时长

node.js - 在不重新启动 "server"的情况下编码 node.js

javascript - 如何在 Javascript 命名空间脚本中创建函数数组

python - 在 if-elif-else 语句中定义值时打印小计?名称错误问题[Python 2.7]

javascript - nodejs express 应用程序不会返回 json 数组

javascript - 如何在 JavaScript 中检查 undefined variable

Javascript 使用动态数组防止 "undefined"值

jquery - $.fancybox.close() 不起作用