在promise问题中调用异步等待

时间:2018-11-28 19:29:15

标签: node.js

我有一个脚本,该脚本读取CSV文件,将其转换为json,然后逐行读取以检查数据库中是否已有数据。到目前为止,我可以获取数据,但是我的问题是对我的数据库的调用。因为我想使用await来查询数据库,所以我将其包装在异步函数中。

const processFile = async (file) => {
    var rowcount = 0
    csv()
        .fromFile(file)
        .subscribe(json => { 
            return new Promise((resolve, reject) => {
                console.log(rowcount++ + ' ' + recCount);
                console.log('recProcessed', {rowcount, recCount})
                var result = await db.checkFarmMaster(json.APN)
                console.log(result.recordset[0].RecCount)
                resolve();               
        })
        .then(() => {
            console.log(recCount)              
        })
        .catch(err => {
            console.log(err.message)             
        })
        })}

但是会产生以下错误

  

var结果=等待db.checkFarmMaster(json.APN)   SyntaxError:await仅在异步函数中有效

当我这样使用它时,效果很好

const test = async (p_APN) => {
var result = await db.checkFarmMaster(p_APN)
console.log(result.recordset[0].RecCount)
}

所以我认为这是因为它包含在承诺中。

1 个答案:

答案 0 :(得分:2)

您不必在这里使用Promise构造函数,只需返回async函数

    .subscribe(async json => { 
        console.log(rowcount++ + ' ' + recCount);
        console.log('recProcessed', {rowcount, recCount})
        var result = await db.checkFarmMaster(json.APN)
        console.log(result.recordset[0].RecCount)
    })