【发布时间】:2019-01-13 00:25:18
【问题描述】:
我对下面的代码有点困惑。当 promise 返回时,我们使用 .then 和 .catch 但在这段代码中它不存在。如果有人可以向我解释,那就太好了。
另一件事是,当 mongo db 出现连接错误时,突出显示的代码 ("// highlighted 1 //") 会抛出错误,然后返回到 server.post async 版本在 catch 部分 (" // 突出显示 2 // ")。但是错误是未定义的。为什么?
这就是我使用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函数的目的是简化同步使用 Promise 的行为,并对一组Promises执行一些行为。就像Promises类似于结构化回调,async/await类似于组合生成器和承诺。" (Source)
标签: javascript node.js