我还在考虑node.js和承诺。
在我的代码中有一个区域,我希望我的SQL语句按顺序运行。
我希望在一条SQL语句完成后运行一条SQL语句。我不确定我是否正确地履行了承诺。
其中一条SQL语句:
var selectbotagentstoadd=new Promise((resolve,reject)=>{
var sql='SELECT tbltestbotagentstoadd.AgentID FROM tbltestbotagentstoadd WHERE tbltestbotagentstoadd.IDNumber=? AND tbltestbotagentstoadd.MSISDN=?;'
DB.query(sql,[agentidpassnum,agentnumber],function(err,results){
if (err){
return reject(err);
};
return resolve(results);
});
})
承诺声明:
await insertbotagentstoadd.then(()=>{
console.log("done with one");
})
.then(()=>{ selectbotagentstoadd.then((results)=>
{
AgenttoaddIDStore=[];
results.forEach(agent=>{
AgenttoaddIDStore.push({
AgentID:agent.AgentID
});
ctx.session.tempAgentID=agent.AgentID
});
console.log("agent ID: "+ctx.session.tempAgentID);
console.log("done with two");
})})
.then((results)=>{insertcctblricaagents
console.log("done with three");
})
.then((results)=>{selectcctblricaagents.then((result)=>{
console.log(result);
AgentnewIDStore=[];
result.forEach(agent=>{
AgentnewIDStore.push({
AgentID:agent.AgentID
})
ctx.session.AgentID=agent.AgentID
})
console.log("cctblricaagents agent ID: "+ ctx.session.AgentID);
console.log("done with four");
})})
.then(insertcctblricaagentsnum.then((result)=>{
console.log("done with five");
}))
.then(selectcctblricaagentsnum.then((result)=>{
console.log(result)
AgentIDStore=[];
result.forEach(agent=>{
AgentIDStore.push({
AgentID:agent.AgentID,
MainNumber:agent.MainNumber,
})
ctx.session.AgentID=agent.AgentID
ctx.session.agentnumber=agent.MainNumber
})
console.log("cctblricaagentsnum agent ID: "+ ctx.session.AgentID);
console.log("done with six");
}))
.then(insertcctblintblbotagents.then((result)=>{
console.log("done with seven");
}));
我从终端得到的结果:
Agent number: 27815567777
done with one
done with three
agent ID: 89
done with two
[]
cctblricaagents agent ID: null
done with four
1条答案
按热度按时间t3psigkw1#
如果正确返回每个
then
块中的承诺,它应该按顺序执行。简化您的代码,例如:
编辑:
包括你的计算在内,它会是什么样子: