[英]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.