Node.js (ES7) 中的 Fire and Forget Promise
Node.js 中的异步编程通常涉及使用 Promise。 Promise 表示异步操作的最终完成或失败。在某些情况下,您可能希望启动异步操作而不等待其完成。这被称为“解雇并忘记”承诺。
考虑以下代码片段:
redisClientAsync.delAsync('key'); return await someOtherAsyncFunction();
在异步函数中,您可以在不使用await 的情况下执行第一行。这会创建一个 Promise 并立即丢弃它。
这是可以接受的吗?
是的,可以通过这种方式执行异步任务。通过触发并忘记 Promise,两个异步函数(Promise 创建和函数 someOtherAsyncFunction)将同时执行。
处理错误
这种方法的一个潜在问题是如果 delAsync 创建的 Promise 被拒绝,您将不会收到通知。这可能会导致未处理的拒绝,最终使您的进程崩溃。
忽略结果的替代方案
如果您不关心异步操作的结果,有几种处理方法:
Void运算符: 使用 void 运算符丢弃结果:
void (await someAsyncFunction());
捕获并忽略: 使用带有空的 catch 方法忽略异常handler:
... someAsyncFunction().catch(function ignore() {}) ...
并行执行: 如果您仍想等待其他异步操作但不关心特定操作的结果,请使用Promise.all 带有一个array:
var [_, res] = await Promise.all([ someAsyncFunction(), // result is ignored, exceptions aren't someOtherAsyncFunction() ]); return res;
结论
虽然在 Node.js 中可能会触发并忘记 Promise,但请务必注意忽略拒绝相关的潜在风险。在使用此技术之前,请仔细考虑您是否真的不关心异步操作的结果。此外,还有其他方法可用于处理不感兴趣的结果。
以上是Node.js 中解雇和忘记 Promise 可以接受吗?的详细内容。更多信息请关注PHP中文网其他相关文章!