Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 发生错误时,在reject()中传递/返回一个值_Node.js_Es6 Promise - Fatal编程技术网

Node.js 发生错误时,在reject()中传递/返回一个值

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是它的属性(也是一个对象) 当我

使用承诺时,如何使用reject()返回值

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

如果操作成功,我将使用s3Info对象解析承诺。如果有错误,我想拒绝承诺,再次返回s3Info对象,但返回错误消息。发生错误时,我无法获取带有错误消息的s3Info{}。我怎样才能做到这一点

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

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块捕获。非常感谢。