Node.js 发生错误时,在reject()中传递/返回一个值
使用承诺时,如何使用reject()返回值 我正在尝试从node.js代码访问AWS S3存储桶。这是我的 如果操作成功,我将使用s3Info对象解析承诺。如果有错误,我想拒绝承诺,再次返回s3Info对象,但返回错误消息。发生错误时,我无法获取带有错误消息的s3Info{}。我怎样才能做到这一点 我从另一个模块调用它,如下所示-Node.js 发生错误时,在reject()中传递/返回一个值,node.js,es6-promise,Node.js,Es6 Promise,使用承诺时,如何使用reject()返回值 我正在尝试从node.js代码访问AWS S3存储桶。这是我的 如果操作成功,我将使用s3Info对象解析承诺。如果有错误,我想拒绝承诺,再次返回s3Info对象,但返回错误消息。发生错误时,我无法获取带有错误消息的s3Info{}。我怎样才能做到这一点 我从另一个模块调用它,如下所示- log.s3 = await pushToS3(bucketName, filename, data) …其中log是一个对象,s3是它的属性(也是一个对象) 当我
log.s3 = await pushToS3(bucketName, filename, data)
…其中log是一个对象,s3是它的属性(也是一个对象)
当我传递正确的参数时,数据被推送到s3,承诺得到解决,我在log.s3中得到以下内容-
“s3”:{
“成功”:没错,
“信息”:{
“ETag”:“someETag”,
“VersionId”:“someVersionId”
}
}
但是当我输入错误的参数时,比如说一个不存在的bucketName
,我会得到一个错误,我会将它添加到pushToS3
函数中的s3Info
对象中。我就是不能让那个对象回到调用函数
这是发生错误时我所期望的-
{成功:错误,消息:{AccessDenied:拒绝访问
at Request.extractError(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\services\s3.js:585:35)
at Request.callListeners(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\sequential\u executor.js:106:20)
at Request.emit(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\sequential\u executor.js:78:10)
at Request.emit(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\Request.js:683:14)
at Request.transition(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\Request.js:22:10)
在AcceptorStateMachine.runTo(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\state\u machine.js:14:12)
在F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\state\u machine.js:26:10
应请求。(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\Request.js:38:9)
应请求。(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\Request.js:685:12)
at Request.callListeners(F:\workspace\webScraping\botsWorkingOnKeywords\node\u modules\aws sdk\lib\sequential\u executor.js:116:18)
消息:“访问被拒绝”,
代码:“访问被拒绝”,
区域:空,
时间:2019-04-16T04:07:30.545Z,
请求ID:12345,
extendedRequestId:
“NHYAKPOYRMZ4RORRAWAQFSZFX2C2LRB4+x+HzN/oQiL+7+AyG9RnyXA3CLbJfdOj0GZiIUJSB3U=”,
cfId:未定义,
状态代码:403,
可检索:错误,
retryDelay:74.8897630089922}
在调用函数的代码中,将函数调用包装在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;
}
}
我只是把
returnnewpromise
语句放在try块中,它就起作用了<代码>尝试{return new Promise((resolve,reject)=>{s3.putObject(params,(err,data)=>{而不是返回新承诺((resolve,reject)=>{try{s3.putObject(params,(err,data)=>{
感谢您告诉我,当我们拒绝时,传递的值会被调用函数中的catch块捕获。非常感谢。