node.js - 如何在返回 Promise 的同时添加 catch

标签 node.js promise try-catch

最初,我收到 UnhandledPromiseRejectionWarning: TypeError: Cannot read property "distance"of undefined。为了解决这个错误,我添加了一个带有拒绝的 if 条件。现在收到这个错误 UnhandledPromiseRejectionWarning:未处理的 promise 拒绝。此错误的根源是在没有 catch block 的情况下抛出异步函数内部,或者拒绝未使用 .catch() 处理的 Promise。 (拒绝 ID:1)。有什么解决办法吗? 这是我的代码

export function fun1(): Promise < survayResult > {
        return new Promise((resolve, reject) => {
            //..........
            //..........
            surveyDistance.forEach((result) => {
                //
            })
            if(condition) {
                reject(new Error("something went erong"));
                return
            }

            let totalDistance = surveyDistance[0].distance;
           // ...
            //...
            resolve("with some data");
        })
    }

最佳答案

我认为你想得太多了, promise 应该解决拒绝,它们没有内置的错误处理支持。然而,在这种情况下,错误消息可能是一件好事,因为它告诉您参数 (surveyDistance) 不是您所期望的。我不会评论好的或坏的做法,因为我不知道您的代码库,但您应该犹豫是否使用 try/catch,除非确实存在可能出错的地方(根据我的经验)。

export function fun1(): Promise < survayResult > {
  return new Promise((resolve, reject) => {
    try {
        //..........
        //..........
        surveyDistance.forEach((result) => {
            //
        })
        if(condition) {
            reject(new Error("something went erong"));
            return
        }

        let totalDistance = surveyDistance[0].distance;
       // ...
        //...
        resolve("with some data");
    } catch (e) {
        reject("Your error message:" + e);
    }
  })
}

关于node.js - 如何在返回 Promise 的同时添加 catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60558324/

相关文章:

javascript - node.js 在异步请求中缺少发布数据

javascript - 如何在运行另一个函数之前等待 jQuery 切换完成?

javascript - 为什么这个 promise 链会立即解决?

java - 指定抛出 IOException

java - Try-Catch 的 Catch 部分未执行

java - 抛出和捕获多个异常

javascript - Nodejs CPU 使用率高

node.js - Nodejs中字节转十六进制和十六进制转字节

node.js - Websocket 和 Ec2 实例

javascript - 如何检查获取调用并返回相同的调用