如何从async / await方法的catch块返回promise(reject)?

时间:2019-08-23 17:25:51

标签: javascript node.js async-await

我要从异步方法中调用一个回调方法,然后再由另一个然后是另一个异步方法调用该异步方法。

我尝试使用新的返回Promise.reject(new Error(error)); 但这不起作用。

async function getBookDescription(bookid){
    logger.info("Inside getBookDescription");
    if(booked){
            var getBookDocPromise = promisify(MongoModel.getByBookID);
            return await getVaultDocPromise(bookid)
    }else{
            var getDefaultBookPromise = promisify(MongoModel.getDefaultBookConfigs);
            return await getDefaultBookPromise();
    }
}

async function getbookdetails(bookid, credentials){
    logger.info("Inside getbookdetails");
    var errMessage;
    try {
        try{
            var bookdetails = await getBookDescription(bookid);
        }catch (error) {
            logger.info("error"+JSON.stringify(error));
            return Promise.reject(new Error(error));
        }
        if(bookdetails && bookdetails >0){
            logger.info("got the bookdetails");
            return bookdetails;
        }else{
            logger.info("inside error");
            errMessage = {
                "message": bookDetailsNotFound
            }
            logger.error(errMessage.message);
            return errMessage
        }
      } catch (error) {
        return error
        }
}

async function addbooks(req,res){
    logger.info("Inside addbooks()");
    try {
        var result = await getbookdetails(bookId);
        return res.status(result.statusCode).send(result.message);
      } catch (error) {
          logger.info("inside error");
          return res.status(error.statusCode).send(error);
      }
}

预期->万一getBookDescription中出现错误,应抛出拒绝并调用addbooks catch。

Actual-> UnhandledPromiseRejectionWarning:TypeError:res.status需要代码参数     在ServerResponse.status(/Users/mayank/Documents/work/git/cb-credential-service/node_modules/express/lib/response.js:68:11)     在addCredsToVault(/Users/mayank/Documents/work/git/cb-credential-service/src/app/v2/api/credential-reference-api.js:55:22)     在     在process._tickDomainCallback(内部/进程/next_tick.js:229:7) (节点:25108)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:7) (节点:25108)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

0 个答案:

没有答案