首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ES2017异步与jQuery .ready()

使用ES2017异步与jQuery .ready()
EN

Stack Overflow用户
提问于 2017-04-18 13:17:07
回答 3查看 2.9K关注 0票数 3

我正在学习异步函数在ES2017中引入的特性,我似乎无法做到以下几点:

代码语言:javascript
运行
复制
async function sayHelloAsync() {
  let {autosave} = await browser.storage.local.get('autosave');
  if (autosave) {
    $('#helloButton').click();
  }
}

$(sayHelloAsync);

我已经在我的小应用程序中为我的需求找到了一个解决方案,但我想知道为什么这个方法不能工作。一旦我删除了async,它就会像预期的那样工作。我还有其他自定义的事件绑定,它们使用async函数作为回调,它们工作得很好。

我在Linux上使用谷歌Chrome 57。

更新

我更新了代码示例,以消除对加载DOM和jQuery的需求的混淆。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-18 13:38:06

UPD:,正如昆廷所提到的,问题已经得到解决,jQuery 3.6.0 (也许很少有早期版本)能像预期的那样工作。

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

代码语言:javascript
运行
复制
isFunction: function( obj ) {
  return jQuery.type( obj ) === "function";
}

jQuery.type( obj )返回的是object而不是预期的function。这可能是jQuery中的一个bug,但这就是为什么函数没有执行的原因。

进一步挖掘,jQuery调用toString.call( obj ) ti确定一个类型,并尝试将结果映射到已知类型。它不能,这就是它返回object的原因。

所以这里的问题在于jQuery,而不是异步函数。

票数 5
EN

Stack Overflow用户

发布于 2020-03-04 13:42:13

可以使用本机js。

代码语言:javascript
运行
复制
document.addEventListener( 'DOMContentLoaded',  async function () {});
票数 0
EN

Stack Overflow用户

发布于 2021-04-10 23:30:20

似乎OP对他们的问题找到了一个答案,但实际上并不是问题标题的答案。我想在我编写的使用document.ready的Puppeteer脚本中等待jQuery函数。

这就是我是如何做到的,它回答了题为:

您可以将document.ready函数包装在页面准备就绪时解析的承诺中。

代码语言:javascript
运行
复制
  //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;
  }

然后,如果要等待加载文档:

代码语言:javascript
运行
复制
await domReady();
// The rest of your dependant code goes here...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43473353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档