发生错误时通过/返回reject()中的值

时间:2019-04-16 04:37:41

标签: node.js es6-promise

在使用promises时如何使用reject()返回值?

我正在尝试从我的node.js代码访问AWS S3存储桶。这是我的code

如果操作成功,我将使用s3Info对象解决promise。如果有错误,我想拒绝promise,再次返回s3Info对象,但带有错误消息。发生错误时,我无法获得带有错误消息的s3Info {}。我该如何实现?

我从另一个模块调用它,如下-

log.s3 = await pushToS3(bucketName, filename, data)

...其中log是一个对象,s3是它的属性(也是一个对象)

当我传递正确的参数时,数据被推送到s3,并且答应被解决,我在log.s3-

中得到以下内容
  

“ s3”:{           “成功”:是的,           “信息”: {               “ ETag”:“ someETag”,               “ VersionId”:“ someVersionId”           }       }

但是当我输入错误的参数时,说一个不存在的bucketName时,我得到一个错误,并将其添加到s3Info函数的pushToS3对象中。我只是不能让那个对象回到调用函数。

这是发生错误时的期望-

  

{成功:否,消息:{AccessDenied:访问被拒绝          在Request.extractError(F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ services \ s3.js:585:35)          在Request.callListeners(F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ sequential_executor.js:106:20)          在Request.emit(F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ sequential_executor.js:78:10)          在Request.emit(F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ request.js:683:14)          在Request.transition(F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ request.js:22:10)          在AcceptorStateMachine.runTo(F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ state_machine.js:14:12)          在F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ state_machine.js:26:10          应要求。 (F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ request.js:38:9)          应要求。 (F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ request.js:685:12)          在Request.callListeners(F:\ workspace \ webScraping \ botsWorkingOnKeywords \ node_modules \ aws-sdk \ lib \ sequential_executor.js:116:18)        消息:“访问被拒绝”,        代码:“ AccessDenied”,        地区:null,        时间:2019-04-16T04:07:30.545Z,        requestId:12345,        extendedRequestId:         'NhyakPOYrMZ4RoRrwaqFSXZFx2c2lrb4 + x + HzN / oQiL + 7 + AyG9RnyXA3CLbJfdOj0GZiIUJSB3U =',        cfId:未定义,        statusCode:403,        可重试:错误,        retryDelay:74.88976302089922}

1 个答案:

答案 0 :(得分:3)

在调用函数的代码中,您可以将函数调用包装在try / catch语句中。当您在函数中调用reject()时,它将引发错误。您可以捕获该错误,并从错误对象获取传递给reject()的数据,对其进行转换并返回适当的值

async function main() {
  try {
    // ... do your things
    log.s3 = await pushToS3(bucketName, filename, data)
    return someValue;
  } catch (error) {
    console.log(error);
    return error;
  }
}