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