为了账号安全,请及时绑定邮箱和手机立即绑定

ES6 异步函数返值问题

ES6 异步函数返值问题

呼唤远方 2018-08-18 22:01:19
类中一成员函数功能查询数据并返回结果集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 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

用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的语法使用,建议找相关的博客研究一下


查看完整回答
反对 回复 2018-08-19
  • 1 回答
  • 0 关注
  • 839 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信