我正在学习异步函数在ES2017中引入的特性,我似乎无法做到以下几点:
async function sayHelloAsync() {
let {autosave} = await browser.storage.local.get('autosave');
if (autosave) {
$('#helloButton').click();
}
}
$(sayHelloAsync);我已经在我的小应用程序中为我的需求找到了一个解决方案,但我想知道为什么这个方法不能工作。一旦我删除了async,它就会像预期的那样工作。我还有其他自定义的事件绑定,它们使用async函数作为回调,它们工作得很好。
我在Linux上使用谷歌Chrome 57。
更新
我更新了代码示例,以消除对加载DOM和jQuery的需求的混淆。
发布于 2017-04-18 13:38:06
UPD:,正如昆廷所提到的,问题已经得到解决,jQuery 3.6.0 (也许很少有早期版本)能像预期的那样工作。
我已经检查了jQuery源代码,下面是它执行的检查,以找出参数是什么:
isFunction: function( obj ) {
return jQuery.type( obj ) === "function";
}jQuery.type( obj )返回的是object而不是预期的function。这可能是jQuery中的一个bug,但这就是为什么函数没有执行的原因。
进一步挖掘,jQuery调用toString.call( obj ) ti确定一个类型,并尝试将结果映射到已知类型。它不能,这就是它返回object的原因。
所以这里的问题在于jQuery,而不是异步函数。
发布于 2020-03-04 13:42:13
可以使用本机js。
document.addEventListener( 'DOMContentLoaded', async function () {});发布于 2021-04-10 23:30:20
似乎OP对他们的问题找到了一个答案,但实际上并不是问题标题的答案。我想在我编写的使用document.ready的Puppeteer脚本中等待jQuery函数。
这就是我是如何做到的,它回答了题为:
您可以将document.ready函数包装在页面准备就绪时解析的承诺中。
//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...https://stackoverflow.com/questions/43473353
复制相似问题