簡體   English   中英

如何處理 Node 中的 promise 拒絕?

[英]How do I handle promise rejection in Node?

我有一些相當簡單的代碼,但我不知道我做錯了什么:

  try {
    service.cache.client = await initCache();
  } catch (e) {
    console.log(e);
  }

const initCache = async () => {
  const options = {
    url: my_URL,
    port: my_PORT + 4
  };

  const client = await getClient(options);

  client.on('connect', (a, b) => {
    logger.info(
      `Successfully connected:  ${my_URL}:${my_PORT}`
    );
    client.connect = true;
  });

  client.on('error', (err) => Promise.reject());

  return client;
};

編輯:我應該在上面的示例中補充一點, my_URL是一個永遠不會連接的假 URL。 我正在嘗試編寫一些代碼,以便應用程序在 chache 客戶端不可用時使用替代方法。

無論我做什么,我都無法逃脫 Unhandled Rejection 警告。 上面的代碼導致error: Unhandled Rejection at: Promise 如果我將一個新錯誤傳遞給Promise.reject ,我會得到同樣的結果。 如果我在 catch 塊中拋出我自己的錯誤,我仍然會收到error: Unhandled Rejection at: Promise 我該怎么做才能真正處理這種拒絕?

編輯:如果我將client.on更改為client.on('error', (err) => new Error(err)); ,未處理的 Promise 消息消失。 但我無法在 catch 塊中捕捉到這個錯誤; 一個簡單的console.log沒有發生。

當使用帶有 Promise 的回調時,你必須做一些工作才能讓它們很好地協同工作。 如果我理解您的意圖,您希望等待客戶端連接以返回 promise,並且在發生事件error時您想拋出錯誤。

您必須像這樣返回一個新的 Promise:

const initCache = async () => {
  const options = {
    url: my_URL,
    port: my_PORT + 4,
  };

  const client = await getClient(options);

  return new Promise((success, reject) => {
    client.on("connect", (a, b) => {
      logger.info(`Successfully connected:  ${my_URL}:${my_PORT}`);
      client.connect = true;
      success(client);
    });

    client.on("error", (err) => reject(err));
  });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM