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函数查询是正确的。
请教!


呼唤远方
浏览 850回答 1
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的语法使用,建议找相关的博客研究一下
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Node.js