JavaScript ES8 async/await场景下,如何跳过不需要等待结果的异步任务?
实现方案
直接调用promise实例不添加await关键字即可,主线程触发该异步任务后会立刻向下执行后续逻辑,不会产生阻塞。
需要注意的是:如果该异步任务运行抛出异常,没有对应错误处理会触发全局的unhandledRejection警告,因此建议给该任务附加独立的catch逻辑,错误处理不会侵入主流程的try/catch块。
修改后的代码示例:
// 注意:使用await的函数必须声明为async const doMyTasks = async () => { try { // 第一个任务:需要等待结果 let prom_t1 = util.promisify(myUpdateRecord); let res_rec = await prom_t1(); // 第二个任务:不需要等待结果,触发即走 let prom_t2 = util.promisify(shootNotificationEmails); // 移除await,附加独立错误处理,不阻塞后续任务 prom_t2(res_rec).catch(err => { console.log(`邮件通知发送失败:${err.message}`) }); // 第三个任务:无需等第二个任务完成,直接执行 let prom_t3 = util.promisify(restHouseKeep); await prom_t3(); } catch(error) { console.log(`主流程执行失败:${error.message} [stack: ${error.stack}]`); } };
方案优势
- 完全符合ES8+语法规范,不需要回退到回调式的原始调用
- 独立错误处理和主流程隔离,邮件任务失败不会影响核心业务逻辑运行
- 后续如果需要调整为等待邮件任务完成,仅需加回
await关键字即可,改造成本极低
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

