将es2017 async与jquery.ready()一起使用

j1dl9f46  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(501)

我正在学习es2017中引入的异步函数功能,但似乎无法实现以下功能:

  1. async function sayHelloAsync() {
  2. let {autosave} = await browser.storage.local.get('autosave');
  3. if (autosave) {
  4. $('#helloButton').click();
  5. }
  6. }
  7. $(sayHelloAsync);

我已经在我的小应用程序中为我的需要管理了一个变通方法,但我想知道为什么这不起作用。只要我取下这个 async ,它按预期工作。我还有其他自定义事件绑定,它们使用 async 作为回调函数,它们工作得很好。
我在linux上使用google chrome 57。
更新
我更新了我的代码示例,以消除关于我需要加载dom和jquery的混淆。

wd2eg0qa

wd2eg0qa1#

我查过了 jQuery 源代码,下面是它执行的检查,以找出参数是什么:

  1. isFunction: function( obj ) {
  2. return jQuery.type( obj ) === "function";
  3. }

jQuery.type( obj ) 返回 objectfunction 正如所料。这可能是一个错误 jQuery ,但这就是函数未执行的原因。
再挖一点 jQuery 电话 toString.call( obj ) ti确定一个类型并尝试将结果Map到已知类型。它不能,这就是它返回的原因 object .
所以这里的问题在于 jQuery 不使用异步函数。

ego6inou

ego6inou2#

您可以使用原生js

  1. document.addEventListener( 'DOMContentLoaded', async function () {});
wf82jlnq

wf82jlnq3#

似乎op找到了他们问题的答案,而不是问题标题的答案。我想等待document.ready函数在我正在编写的 puppet 脚本中使用jquery。
我是这样做的;它回答了题为:
您可以将document.ready函数 Package 在一个承诺中,该承诺在页面准备就绪时解析。

  1. //Wrap document ready function in a promise to be able to await it
  2. async domReady() {
  3. let promise = new Promise((resolve, reject) => {
  4. $(document).ready(() => {
  5. resolve("ready");
  6. });
  7. //Any reason for rejection could go here and have a call to reject(error);
  8. });
  9. return promise;
  10. }

然后,如果要等待文档加载,请执行以下操作:

  1. await domReady();
  2. // The rest of your dependant code goes here...
展开查看全部

相关问题