Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中使顺序if语句异步?_Javascript_Node.js_Ecmascript 6 - Fatal编程技术网

如何在JavaScript中使顺序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 == "

我在循环中有一系列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 == "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,但您的答案是正确的:)感谢您的响应,但是它仍然不起作用,它仍然没有将找到的第一个结果上载到数据库。