亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ES6 異步函數返值問題

ES6 異步函數返值問題

千萬里不及你 2018-08-23 15:37:40
類中一成員函數功能查詢數據并返回結果集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貢獻1860條經驗 獲得超8個贊

用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-26
  • 1 回答
  • 0 關注
  • 683 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號