如何处理Node.JS中的UnhandledPromiseRejectionWarning

DarkCeptor44

我有一些方法使用该request模块从URL获取图像并将其作为Promise返回,它可以工作,但是当找不到图像时,它会拒绝状态代码为404的承诺。我调查了该警告,并说要处理拒绝,您必须在then()之后设置catch回调,但是我不使用then(),而是使用async / await。

这是获取图片的代码:

/**
 * Returns picture from S3
 * @param {String} filename Name of the file with extension
 * @returns {String} Base64 string of the file
 */
getPictureFromS3: function (filename) {
    return new Promise((resolve, reject) => {
        let url = this.getURLFromS3(filename);
        request(url, (err, res, body) => {
            if (err) reject(err);
            if (res.statusCode !== 200) {
                reject(`Invalid status code <${res.statusCode}>`);
            }
            resolve(new Buffer.from(body).toString('base64'));
        });
    });
}

这就是我所说的方法:

try{
    socket.on('server get pictures', () => db.getPictures(data=>{
        if(data!==null){
            data.forEach(async e=>{
                let picture = await utils.getPictureFromS3(e.getFilename());
            });
        }
    }));
}catch(err){
    console.log(err);
}

完整警告:

(node:256) UnhandledPromiseRejectionWarning: Invalid status code <404>
(node:256) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which 
was not handled with .catch(). (rejection id: 1)
(node:256) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

使用节点v10.14.2。

阿什什·莫迪(Ashish Modi)

这里有两个问题

  • 您很想尝试在内部执行异步操作forEach,但该操作不能与Promise一起使用。您需要使用for..of循环,或者Promise.all可以并行执行操作。

  • 例外是在侦听器内部引发,因此它不会在外部冒泡,因此您的捕获将不会执行。您需要将try catch移入其中。像这样

socket.on("server get pictures", () =>
  db.getPictures(data => {
    if (data !== null) {
      for(const e of data) {
        try {
          let picture = await utils.getPictureFromS3(e.getFilename());
        } catch (err) {
          console.log(err);
        }
      }
    }
  })
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理Node.js中的fs.createReadStream()错误?

来自分类Dev

使用node.js测试API如何处理无效的JSON语法请求主体

来自分类Dev

Node.js如何处理一个线程的同时请求?

来自分类Dev

如何处理node.js中的循环?

来自分类Dev

我如何处理node.js中(cli)输出的(cli)stdout流的字符编码?

来自分类Dev

如何处理node.js中的所有异常

来自分类Dev

Node.js-如何处理流错误事件

来自分类Dev

Node.js分析:如何处理v8.log文件

来自分类Dev

在JavaScript(Node.js)中更新MongoDB集合时如何处理错误

来自分类Dev

node.js如何处理同时的http请求?

来自分类Dev

如何处理node.js可写流中的结束信号?

来自分类Dev

如何处理Express Node.js中的主体解析器错误

来自分类Dev

在Lua中,如何处理?

来自分类Dev

Node.js /如何处理连接泄漏?

来自分类Dev

Node.JS如何处理重复的传递依赖项?

来自分类Dev

如何处理node.js中的ASP.NET身份记录?

来自分类Dev

如何处理来自node.js的网页上的数据

来自分类Dev

NodeJS-如何处理UnhandledPromiseRejectionWarning?

来自分类Dev

如何处理XSLT中的处理指令

来自分类Dev

如何处理node.js中的所有异常

来自分类Dev

Node.js如何处理未封闭的HTTP响应

来自分类Dev

如何处理node.js casterror?

来自分类Dev

Node.js服务器如何处理请求?

来自分类Dev

在node.js中初始化|| 如何处理node.js中的初始配置

来自分类Dev

如何处理来自node.js的网页上的数据

来自分类Dev

单个线程如何处理Node.js中的异步代码?

来自分类Dev

Alexa Node JS 如何处理多个事件的取消事件

来自分类Dev

如何处理 node.js 请求中的 URI 错误?

来自分类Dev

Node.js - 如何处理测试文件中的异步模拟?

Related 相关文章

热门标签

归档