繁体   English   中英

Async Await & Promise 解释

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM