首页 > 解决方案 > 如何在节点js中的异步函数完成工作后调用函数

问题描述

我正在尝试在函数完成工作后调用函数

 invalue.map((val) => {
               const data = column.map(v=>{ return encryptData.regularDataEncrypt( val[v])});
               const withcote = data.map(x => {return  "'" + x + "'"})   
               const serialnumber_voice =val.serialnumber_voice;   
               const cassdataQuery=`insert into cdr_voice(id,${str},isencrypted) values(now(),${withcote.join()},false)`;
               db.execute(cassdataQuery).then(data=>{
                 pg.query(`update cdr_voice set is_cassandra= true WHERE serialnumber_voice = ${serialnumber_voice}`).then(u=>{
                    console.log("is_cassandra updated",serialnumber_voice )
                 })
                 console.log("data updated ",serialnumber_voice)
               })
            })

我去执行

 function incrementQueryValue(){
    encryptCdrVoice()
}

地图功能完成后的功能

标签: javascriptnode.jsasynchronous

解决方案


尝试从与 一起使用的回调中返回一个承诺map

通过这种方式,可以等待所有的 Promise 被解决,Promise.all然后调用encryptCdrVoice

const tasks = invalue.map((val)=>{
    const data = column.map(v=>{ return encryptData.regularDataEncrypt( val[v])});
    const withcote = data.map(x => {return  "'" + x + "'"})
    const serialnumber_voice =val.serialnumber_voice;
    const cassdataQuery=`insert into cdr_voice(id,${str},isencrypted) values(now(),${withcote.join()},false)`;
    return db.execute(cassdataQuery).then(data=>{
        pg.query(`update cdr_voice set is_cassandra= true WHERE serialnumber_voice = ${serialnumber_voice}`).then(u=>{
            console.log("is_cassandra updated",serialnumber_voice )
        })
        console.log("data updated ",serialnumber_voice)
    })

})

Promise.all(tasks).then({
    encryptCdrVoice()
})

推荐阅读