Как добавить улов при возвращении обещания - PullRequest
1 голос
/ 06 марта 2020

Изначально я получал UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство "distance" из undefined. Чтобы решить эту ошибку, я добавил условие if с отклонением. теперь получаю эту ошибку UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри asyn c -блокировки была выброшена функция без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 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");
        })
    }

1 Ответ

0 голосов
/ 06 марта 2020

Я думаю, вы слишком обдумываете, обещание должно resolve или reject, они не имеют встроенной поддержки обработки ошибок. Однако в этом случае сообщение об ошибке, вероятно, является хорошей вещью, так как оно говорит вам, что аргументы (surveyDistance) не соответствуют вашим ожиданиям. Я не буду комментировать хорошие или плохие практики, потому что я не знаю вашу кодовую базу, но вы должны без колебаний использовать try / catch, если на самом деле нет чего-то, что могло бы go ошибаться (по моему опыту).

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);
    }
  })
}
...