const validatePnr = async (pnr: string) => {
return new Promise<void>(async (resolve, reject) => {
try {
setIsLoading(true);
const url = `/api/v2/pnr/validate?stationCode=${stationCode}&outletId=${outletId}&vendorId=${vendorId}&pnr=${pnr}${
!!currentStationInfo?.arrival ? `&eta=${currentStationInfo.arrival}` : ""
}`;
const data = (await CaptchaGet({ url, disableErrorToast: true })) as ApiResponse<ValidatePnrInfo>;
if (data.status === "failure") {
invalidPnrCb(data.message, data.result);
reject();
} else if (data.result.status && data.result.statusCode === 200) {
const pnrResponse: PnrResponse = { status: data.status, result: data.result.data, message: data.message };
validPnrCb(pnrResponse, pnr);
resolve();
} else {
invalidPnrCb(data.result.statusMsg, data.result);
reject();
}
setData(data.result);
} catch (err) {
setIsLoading(false);
invalidPnrCb("Something went wrong. Please try again.");
reject();
}
});
};
使用值捕获非错误承诺拒绝:JavaScript 承诺处理哨兵中未定义,我正在正确处理拒绝,但需要您的建议我应该在代码中更改哪里?
传入一些东西
reject('something went wrong'))
;
它是空的 (
undefined
),这就是您看到该错误的原因。
如果您看到消息“使用键 x、y、z 捕获的非错误异常(或承诺拒绝)”的错误,则当您这样做时会发生这种情况
您可以在“附加数据”部分的serialized条目中看到相关非Error对象的内容。
为了更好地了解这些错误事件,我们建议根据序列化数据的内容查找普通对象被传递或抛出到 Sentry 的位置,然后将普通对象转换为 Error 对象。
要忽略此错误,您可以在哨兵中添加以下配置
ignoreErrors: ['Non-Error promise rejection captured']
或者要解决这个问题,你可以尝试
if (!(error instanceof Error)) {
error = new Error(`Non-Error rejection: ${JSON.stringify(error)}`);
}
Sentry.captureException(error);
这将确保错误对象不是普通对象