Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Async/Await中如何优雅地退出不确定时间调用的回调函数?_创想鸟

Async/Await中如何优雅地退出不确定时间调用的回调函数?

async/await中如何优雅地退出不确定时间调用的回调函数?

async await 中如何退出不确定时间调用的回调函数?

在使用 async await 时,我们经常会遇到需要在不确定时间调用的回调函数中退出函数的情况。例如,我们想要监听按钮的某个属性变化,但是需要触发按钮的点击事件后才能进行监听。

常规 promise 写法

常规的 promise 写法如下:

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();    });  });};

async 写法的需求

现在,我们想要将上述代码改成 async 写法,但遇到了问题:

const b = async (): promise => {  const callback = (mutations: mutationrecord[]) => {    // 监听按钮的某个属性变化,怎么在此处退出函数?  };  const observer = new mutationobserver(callback);  observer.observe(buttonel, {    attributes: true,  });  // 调用一个 promise 函数,成功后触发按钮的点击事件,然后监听按钮的属性变化  await p();  buttonel.click();};

解决方案

你的需求可能需要最新的 promise.withresolvers() 接口,当前处于 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};

注意:

promise.withresolvers() 功能较新,可能需要更新 core-js。如果使用 typescript,需要更新 ts 版本并在 tsconfig.json 中配置 lib: esnext。

以上就是Async/Await中如何优雅地退出不确定时间调用的回调函数?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1498174.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Keploy VS Code Extension:彻底改变自动化单元和集成测试生成
上一篇 2025年12月19日 20:13:59
如何用Git子模块在项目中关联和管理GitHub第三方库?
下一篇 2025年12月19日 20:14:15

相关推荐

发表回复

登录后才能评论
关注微信