捕获的非错误承诺拒绝值:未定义

问题描述 投票:0回答:2
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 承诺处理哨兵中未定义,我正在正确处理拒绝,但需要您的建议我应该在代码中更改哪里?

javascript typescript promise
2个回答
1
投票

传入一些东西

reject('something went wrong'))
;

它是空的 (

undefined
),这就是您看到该错误的原因。


0
投票

如果您看到消息“使用键 x、y、z 捕获的非错误异常(或承诺拒绝)”的错误,则当您这样做时会发生这种情况

  • 使用普通对象调用 Sentry.captureException(),
  • 扔一个普通物体,或者
  • 用普通对象拒绝承诺。

您可以在“附加数据”部分的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);

这将确保错误对象不是普通对象

© www.soinside.com 2019 - 2024. All rights reserved.