在使用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}
答案 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;
}
}