Pass/Return 发生错误时 reject() 中的一个值
Pass/Return a value in reject() when an error occurs
如何在使用 promises 时 return 使用 reject() 的值?
我正在尝试从我的 node.js 代码访问 AWS S3 存储桶。这是我的 code
如果操作成功,我用 s3Info 对象解析承诺。如果出现错误,我想拒绝承诺,再次 returning s3Info 对象,但带有错误消息。发生错误时,我无法获取带有错误消息的 s3Info{}。我怎样才能做到这一点?
我从另一个模块调用它如下-
log.s3 = await pushToS3(bucketName, filename, data)
...其中 log 是一个对象,s3 是它的 属性(也是一个对象)
当我传递正确的参数时,数据被推送到 s3 并且承诺得到解决,我在 log.s3 中得到以下内容-
"s3": {
"success": true,
"message": {
"ETag": "someETag",
"VersionId": "someVersionId"
}
}
但是当我输入错误的参数时,比如 bucketName
不存在,我得到一个错误,我将其添加到 pushToS3
函数中的 s3Info
对象。我只是无法将该对象返回给调用函数。
这是我在出错时所期望的-
{ success: false, message: { AccessDenied: Access Denied
at Request.extractError (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\services\s3.js:585:35)
at Request.callListeners (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\sequential_executor.js:106:20)
at Request.emit (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\sequential_executor.js:78:10)
at Request.emit (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:683:14)
at Request.transition (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:22:10)
at AcceptorStateMachine.runTo (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\state_machine.js:14:12)
at F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\state_machine.js:26:10
at Request. (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:38:9)
at Request. (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:685:12)
at Request.callListeners (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\sequential_executor.js:116:18)
message: 'Access Denied',
code: 'AccessDenied',
region: null,
time: 2019-04-16T04:07:30.545Z,
requestId: 12345,
extendedRequestId:
'NhyakPOYrMZ4RoRrwaqFSXZFx2c2lrb4+x+HzN/oQiL+7+AyG9RnyXA3CLbJfdOj0GZiIUJSB3U=',
cfId: undefined,
statusCode: 403,
retryable: false,
retryDelay: 74.88976302089922 } }
在调用函数的代码中,您可以将函数调用包装在 try/catch 语句中。当您在函数中调用 reject()
时,它会抛出错误。您可以捕获该错误并从错误对象获取传递给 reject()
的数据,将其转换并 return 任何合适的
async function main() {
try {
// ... do your things
log.s3 = await pushToS3(bucketName, filename, data)
return someValue;
} catch (error) {
console.log(error);
return error;
}
}
如何在使用 promises 时 return 使用 reject() 的值?
我正在尝试从我的 node.js 代码访问 AWS S3 存储桶。这是我的 code
如果操作成功,我用 s3Info 对象解析承诺。如果出现错误,我想拒绝承诺,再次 returning s3Info 对象,但带有错误消息。发生错误时,我无法获取带有错误消息的 s3Info{}。我怎样才能做到这一点?
我从另一个模块调用它如下-
log.s3 = await pushToS3(bucketName, filename, data)
...其中 log 是一个对象,s3 是它的 属性(也是一个对象)
当我传递正确的参数时,数据被推送到 s3 并且承诺得到解决,我在 log.s3 中得到以下内容-
"s3": { "success": true, "message": { "ETag": "someETag", "VersionId": "someVersionId" } }
但是当我输入错误的参数时,比如 bucketName
不存在,我得到一个错误,我将其添加到 pushToS3
函数中的 s3Info
对象。我只是无法将该对象返回给调用函数。
这是我在出错时所期望的-
{ success: false, message: { AccessDenied: Access Denied at Request.extractError (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\services\s3.js:585:35) at Request.callListeners (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\sequential_executor.js:106:20) at Request.emit (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\sequential_executor.js:78:10) at Request.emit (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:683:14) at Request.transition (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:22:10) at AcceptorStateMachine.runTo (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\state_machine.js:14:12) at F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\state_machine.js:26:10 at Request. (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:38:9) at Request. (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\request.js:685:12) at Request.callListeners (F:\workspace\webScraping\botsWorkingOnKeywords\node_modules\aws-sdk\lib\sequential_executor.js:116:18) message: 'Access Denied', code: 'AccessDenied', region: null, time: 2019-04-16T04:07:30.545Z, requestId: 12345, extendedRequestId: 'NhyakPOYrMZ4RoRrwaqFSXZFx2c2lrb4+x+HzN/oQiL+7+AyG9RnyXA3CLbJfdOj0GZiIUJSB3U=', cfId: undefined, statusCode: 403, retryable: false, retryDelay: 74.88976302089922 } }
在调用函数的代码中,您可以将函数调用包装在 try/catch 语句中。当您在函数中调用 reject()
时,它会抛出错误。您可以捕获该错误并从错误对象获取传递给 reject()
的数据,将其转换并 return 任何合适的
async function main() {
try {
// ... do your things
log.s3 = await pushToS3(bucketName, filename, data)
return someValue;
} catch (error) {
console.log(error);
return error;
}
}