ES6 异步函数返值问题

类中一成员函数
功能查询数据并返回结果集

class DB 中
......
async Query(strSql)

{
    await this._conpool.request()
    .query(strSql, (err, result) => {
        console.dir(result.recordset);    //已查询到数据在此
        return result.recordset;
    });
} 

调用
let db = new DB();

db.Query2('select * from sc_Product').then(ret => {

    console.dir(ret);
    res.json(ret);
}); 

一直得不到正确的数据,前面打印看到Query函数查询是正确的。
请教!

阅读 1.7k
1 个回答

用promise封装,你这个写法有点不伦不类,(顺便一提 async 是ES7)

Query(strSql)
{
    return new Promise((resolve,reject)=>{
        this._conpool.request()
        .query(strSql, (err, result) => {
            if(err){
                //出错
                reject(err);
            }else{
                console.dir(result.recordset);    //已查询到数据在此
                resolve(result.recordset);
            }
        });
    });
} 

调用:

    let db = new DB();
    db.Query('select * from sc_Product').then(ret => {
    
        console.dir(ret);
        res.json(ret);
    }).catch(e=>{
        //error
    }); 

或者

async function(){
    let db = new DB();
    try{
        let ret =await db.Query('select * from sc_Product');
        console.dir(ret);
        res.json(ret);
    }catch(e){
        //error
    }
}
    
await 用来wait的是一个promise(如果非promise会直接返回结果),而一个async函数的返回值实际上就是一个promise,所以他俩构成一套以同步的方式书写异步代码的语法。
任何异步的操作首先要封装成promise才能用async/await这种语法糖。

从你的第一个函数里可以看出来你还不太懂promise的语法使用,建议找相关的博客研究一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题