异步编程中优雅地处理回调函数退出
本文探讨在使用async/await时,如何有效退出由回调函数触发的异步操作。 问题源于将基于Promise的回调函数改写为async/await风格,以避免嵌套回调导致的代码混乱。
原始代码使用MutationObserver监听按钮属性变化,并在回调函数中使用resolve结束Promise。然而,在async/await环境下,直接在回调函数中使用resolve并非最佳方案。
问题代码示例:
const a = (): Promise<void> => { return new Promise((resolve) => { const callback = (mutations: MutationRecord[]) => { // 监听按钮属性变化,此处退出函数 resolve(); }; const observer = new MutationObserver(callback); observer.observe(buttonEl, { attributes: true }); // 调用Promise函数,触发按钮点击事件 p().then(() => buttonEl.click()); });};const b = async (): Promise<void> => { const callback = (mutations: MutationRecord[]) => { // 监听按钮属性变化,如何在此处退出函数? }; const observer = new MutationObserver(callback); observer.observe(buttonEl, { attributes: true }); await p(); buttonEl.click();};
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。