在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ ES6 異步函數(shù)返值問題

ES6 異步函數(shù)返值問題

類中一成員函數(shù)
功能查詢數(shù)據(jù)并返回結(jié)果集

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

{
    await this._conpool.request()
    .query(strSql, (err, result) => {
        console.dir(result.recordset);    //已查詢到數(shù)據(jù)在此
        return result.recordset;
    });
} 

調(diào)用
let db = new DB();

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

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

一直得不到正確的數(shù)據(jù),前面打印看到Query函數(shù)查詢是正確的。
請教!

回答
編輯回答
陪妳哭

用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);    //已查詢到數(shù)據(jù)在此
                resolve(result.recordset);
            }
        });
    });
} 

調(diào)用:

    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會直接返回結(jié)果),而一個async函數(shù)的返回值實際上就是一個promise,所以他倆構(gòu)成一套以同步的方式書寫異步代碼的語法。
任何異步的操作首先要封裝成promise才能用async/await這種語法糖。

從你的第一個函數(shù)里可以看出來你還不太懂promise的語法使用,建議找相關(guān)的博客研究一下

2017年9月15日 07:01