使用async await时如何在不确定时间的回调函数中退出?-灵析社区

ApplePro

const a = (): Promise => { 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 => { const callback = (mutations: MutationRecord[]) => { // 监听按钮的某个属性变化,怎么在此处退出函数? }; const observer = new MutationObserver(callback); observer.observe(buttonEl, { attributes: true, }); // 调用一个Promise函数,成功后触发按钮的点击事件,然后监听按钮的属性变化 await p(); buttonEl.click(); }; 如上述示例代码,`a`是常规的Promise写法,现在想要改成`b`那样的async写法,请问该怎么办? 想要这么改的原因是函数内部的逻辑逐渐复杂,会调用多个Promise函数,常规写法会陷入层层嵌套的窘境,不利于维护。

阅读量:150

点赞量:0

问AI
你的需求可能需要最新的"Promise.withResolvers()" (https://link.segmentfault.com/?enc=hTtKezd52FvjVz%2BlBS9SoA%3D%3D.N6wDU0jdxIV8GrdmvrxtX77tqdfBIhVE8J%2FoJlzUuZWmMT7kx%2FyOF5YWNxTZc68bfiGjaNnFGlQmqv3v6SWrx%2Bbkg1s%2Bbk0tR5lD6FCE1mZhZvm%2BpLY0YzOgfwPZ68W2q5My%2FeAiFmy7b91qjFb9uw%3D%3D)接口,目前还是"Stage-4"阶段。 const b = async (): Promise => { const { promise, resolve } = Promise.withResolvers() const callback = (mutations: MutationRecord[]) => { resolve(); }; const observer = new MutationObserver(callback); observer.observe(buttonEl, { attributes: true, }); // 调用一个Promise函数,成功后触发按钮的点击事件,然后监听按钮的属性变化 await p(); buttonEl.click(); // 下面这句也可以用 return promise,取决于你的后续逻辑 await promise }; https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240921/d67a2b10cf2cc83d75726dc3d959ce97.png 这个功能才出没多久,考虑兼容旧的浏览器,你可能需要更新"core-js"。 另外,你用了TS,如果需要通过类型检查,可能还要把TS更新到5.4或以上,然后在"tsconfig.json"里确保配置"lib"有"ESNext"这一项。