首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Await promise - NodeJs

Await promise - NodeJs
EN

Stack Overflow用户
提问于 2021-09-11 10:55:50
回答 1查看 34关注 0票数 3

我尝试根据leadId.length为变量myleadId赋值。目标是在此步骤之后,myleadId将具有值以继续下一步。问题是myleadIdundefined when leadId.length <= 0 (else条件)。

代码语言:javascript
复制
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);
  });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-11 11:01:34

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

代码语言:javascript
复制
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);
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69142315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档