如何在JavaScript中使顺序if语句异步?
我在循环中有一系列if语句,如下所示:如何在JavaScript中使顺序if语句异步?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我在循环中有一系列if语句,如下所示: for( var i = 0; i < results_list.length; i++){ find = await results_list[i]; //result 1 if (find.Process == "one") { await stored_proc(38, find.Num, find.Status) } //result 2 if(find.Process == "
for( var i = 0; i < results_list.length; i++){
find = await results_list[i];
//result 1
if (find.Process == "one") {
await stored_proc(38, find.Num, find.Status)
}
//result 2
if(find.Process == "two") {
await stored_proc(37, find.Num, find.Status)
}
//result 3
if(find.Process == "three") {
await stored_proc(39, find.Num, find.Status)
}
}
第二次编辑:我进一步研究了这一点,发现如果有多个结果需要上传,那么它将永远不会上传第一组结果。我已经运行了一些
console.log()
s,发现它总是会得到find.Num
和find.Status
。对于第一个结果之后的每个结果,它只记录更新的数据库。我希望这是有意义的在您的存储过程中
您没有返回承诺。此外,承诺中的承诺被认为是反模式的,您可以轻松地将其链接起来
async function stored_proc(opID, num, stat) {
return sql.executeTransaction(connection, {
procedure: "<stored procedure>",
params: {
OpID: {
val: opID,
type: sql.INT
},
num: {
val: num,
type: sql.STRING
},
Pass: {
val: stat,
type: sql.INT
},
ExtraData: {
val: "upload",
type: sql.STRING
}
}
})
.then(function (data) {
return data.transaction
.commit()
})
.then(function () {
console.log("Updated database....");
})
.catch((err) => {
console.log(err);
})
}
异步函数存储\u proc(opID、num、stat){
返回sql.executeTransaction(连接{
程序:“,
参数:{
OpID:{
瓦尔:奥皮德,
类型:sql.INT
},
数字:{
瓦尔:嗯,
类型:sql.STRING
},
通过:{
瓦尔:统计,
类型:sql.INT
},
额外数据:{
瓦尔:“上传”,
类型:sql.STRING
}
}
})
.then(功能(数据){
返回数据.事务
.commit()
})
.然后(函数(){
console.log(“更新的数据库…”);
})
.catch((错误)=>{
控制台日志(err);
})
}
在您的存储过程中
您没有返回承诺。此外,承诺中的承诺被认为是反模式的,您可以轻松地将其链接起来
async function stored_proc(opID, num, stat) {
return sql.executeTransaction(connection, {
procedure: "<stored procedure>",
params: {
OpID: {
val: opID,
type: sql.INT
},
num: {
val: num,
type: sql.STRING
},
Pass: {
val: stat,
type: sql.INT
},
ExtraData: {
val: "upload",
type: sql.STRING
}
}
})
.then(function (data) {
return data.transaction
.commit()
})
.then(function () {
console.log("Updated database....");
})
.catch((err) => {
console.log(err);
})
}
异步函数存储\u proc(opID、num、stat){
返回sql.executeTransaction(连接{
程序:“,
参数:{
OpID:{
瓦尔:奥皮德,
类型:sql.INT
},
数字:{
瓦尔:嗯,
类型:sql.STRING
},
通过:{
瓦尔:统计,
类型:sql.INT
},
额外数据:{
瓦尔:“上传”,
类型:sql.STRING
}
}
})
.then(功能(数据){
返回数据.事务
.commit()
})
.然后(函数(){
console.log(“更新的数据库…”);
})
.catch((错误)=>{
控制台日志(err);
})
}
将该代码放在异步函数中。@Ele啊,对不起,我在写问题时跳过了这一部分。在我的代码中,它是在一个异步函数中,标题是-你的意思是使它们同步吗?它们似乎已经被异步化了,所以让它们“更异步”似乎有点奇怪。首先,你试图让它等待异步操作,你永远不会让它们真正同步。wait关键字只会使代码看起来是同步的。第二,链接问题中的调用函数没有标记为async
,这可能是您的问题,您发布的代码可以正常工作。如果不等待存储过程结果,则是存储过程
函数未在正确的时间返回满足的承诺的错误。请将该代码放在异步函数中。@Ele啊,对不起,我在写问题时跳过了这一部分。在我的代码中,它是在一个异步函数中,标题是-你的意思是使它们同步吗?它们似乎已经被异步化了,所以让它们“更异步”似乎有点奇怪。首先,你试图让它等待异步操作,你永远不会让它们真正同步。wait关键字只会使代码看起来是同步的。第二,链接问题中的调用函数没有标记为async
,这可能是您的问题,您发布的代码可以正常工作。如果它不等待存储过程结果,那就是存储过程
函数没有在正确的时间返回满足的承诺的错误。我会更进一步,将内部函数转换为等待
s over。然后()
s,但您的答案是正确的:)感谢您的响应,但是它仍然不起作用,它仍然没有将找到的第一个结果上载到数据库。我会更进一步,将内部函数转换为wait
s over。然后()
s,但您的答案是正确的:)感谢您的响应,但是它仍然不起作用,它仍然没有将找到的第一个结果上载到数据库。