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

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

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

async function sayHelloAsync() {
  let {autosave} = await browser.storage.local.get('autosave');
  if (autosave) {
    $('#helloButton').click();
  }
}

$(sayHelloAsync);

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

wd2eg0qa

wd2eg0qa1#

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

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

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

ego6inou

ego6inou2#

您可以使用原生js

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

wf82jlnq3#

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

//Wrap document ready function in a promise to be able to await it
  async domReady() {
    let promise = new Promise((resolve, reject) => {
      $(document).ready(() => {
        resolve("ready");
      });

      //Any reason for rejection could go here and have a call to reject(error);
    });

    return promise;
  }

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

await domReady();
// The rest of your dependant code goes here...

相关问题