[英]Async Await & Promise Explanation
我對以下代碼有點困惑。 當承諾的回報,我們使用.then
與.catch
但在此代碼它不存在。 如果有人可以向我解釋,那就太好了。
另一件事是,當 mongo db 出現連接錯誤時,突出顯示的代碼( “// 突出顯示 1 //” )拋出錯誤,然后返回到 catch 部分中的server.post
異步版本( “//突出顯示 2 // " )。 但錯誤是未定義的。 為什么 ?
這就是為什么我使用了error !== undefined? error : '';
error !== undefined? error : '';
陳述
請指導我
我已將這個基於異步等待的承諾轉換為。 他們工作正常。 此端點用於報告用戶呼叫。
----- 異步版本
server.post('/reporting_in', async (request, response) => {
if (reporter.IsReportingOn()) {
let message = request.body;
try {
const msg = await reporter.addLogMessage(message, response);
response.send(200,{"status": "success"});
} catch (error) {
log.error("\n Error logging call details into database :
\n\n", error!==undefined?error:'', "\n\n"); // highlighted 2 //
response.send(503, {error: 'Unable to connect db'});
}
} else {
response.send(503, 'Reporting is not enabled');
}
});
--- 承諾版
server.post('/reporting_in', async (request, response) => {
if (reporter.IsReportingOn()) {
return new Promise((resolve, reject) => {
let message = request.body;
try {
reporter.addLogMessage(message, response);
resolve(response.send(200));
} catch (error) {
reject(log.error("\n Error logging call details
into database : \n\n", error, "\n\n"));
// }
// });
} else {
response.send(503, 'Reporting is not enabled');
}
});
---> 這個函數在reporting.js 文件中
let addLogMessage = async message => {
let client;
try {
client = await MongoClient.connect(url, {
useNewUrlParser: true
});
} catch (error) {
throw (log.error(error)); // highlighted 1 //
}
try {
let db = client.db('reporting');
const res = await db.collection('reports').insertOne(message);
log.info("\n Succcessfully logged reporting data into the
database : \n\n");
} catch (error) {
log.error("\nError in logging reporting event : \n\n",
error.stack, "\n\n")
} finally {
client.close();
}
}
async 和await 用於處理JavaScript 中的異步操作。promise 是resolved 還是reject 都可以通過then 或catch 來處理。
return new Promise((resolve,reject)=>{
//do some task
//if successfull
resolve('done')
//otherwise
reject('unsuccessfull')
});
並處理我們使用異步等待和嘗試捕獲的承諾
try{
const response = await promise;
}catch(e){
//handle the error
}
注意:await 只能與 async 一起使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.