我正在了解ES2017中引入的async function功能,而我似乎无法使用以下功能:
async function sayHelloAsync() {
let {autosave} = await browser.storage.local.get('autosave');
if (autosave) {
$('#helloButton').click();
}
}
$(sayHelloAsync);
我已经在我的小应用程序中为我的需求设置了一个解决方法,但我想知道为什么这不起作用。一旦我删除async
,它就会按预期工作。我还有其他使用async
函数作为回调的自定义事件绑定,它们工作得很好。
我在Linux上使用Google Chrome 57.
更新
我更新了我的代码示例,以消除我对加载DOM和jQuery的需求的困惑。
答案 0 :(得分:1)
我已经检查了jQuery
源代码,这是一个检查,以确定参数是什么:
isFunction: function( obj ) {
return jQuery.type( obj ) === "function";
}
而jQuery.type( obj )
按预期返回object
而不是function
。这可能是jQuery
中的一个错误,但这就是为什么函数没有执行的原因。
挖掘更多,jQuery
调用toString.call( obj )
ti确定类型并尝试将结果映射到已知类型。它不能和那就是它返回object
的原因。
所以这里的问题是jQuery
而不是你的异步函数。
答案 1 :(得分:0)
您可以使用本机js
document.addEventListener( 'DOMContentLoaded', async function () {});
答案 2 :(得分:0)
似乎 OP 找到了他们问题的答案,但实际上并不是问题标题的答案。我想在使用 jQuery 编写的 Puppeteer 脚本中等待 document.ready 函数。
这就是我的做法;它回答了以下标题的问题:
您可以将 document.ready 函数包装在页面准备就绪时解析的 promise 中。
//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...