我尝试根据leadId.length为变量myleadId赋值。目标是在此步骤之后,myleadId将具有值以继续下一步。问题是myleadId是undefined when leadId.length <= 0 (else条件)。
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);
});
});发布于 2021-09-11 11:01:34
问题是你没有等待你的承诺。这样,它们将在与您的console.log不同的时间完成。您还应该看到,在控制台中,消息myleadId: ...出现在newleadId: ...之前。这是因为promises是异步执行的。因此,它们会让其他代码在执行时继续执行。为了确保在继续使用main函数之前等待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);
});https://stackoverflow.com/questions/69142315
复制相似问题