我需要从一些异步javascript方法中获取一些网络日志, 因此我写了下面的脚本,并在浏览器控制台上执行时返回了期望的值。
let watchDOM = (function(){
let mo = window.MutationObserver;
return function(obj, callback){
if (!obj || !obj.nodeType === 1) {
return;
}
if (mo) {
let obs = new mo(function(mutations, observer) {
callback(mutations);
});
obs.observe(obj, { childList:true, subtree:true });
}
else if (window.addEventListener){
obj.addEventListener('DOMNodeInserted', callback, false);
obj.addEventListener('DOMNodeRemoved', callback, false);
}
}
})();
watchDOM(document.body, function(e) {
// This will notify you if a new DIV is added.
if (e[0].addedNodes[0].tagName === "DIV") {
// If the DIV is added, you can then take some action here.
// For example, you could append your button here.
console.log("div added");
}
});
// This adds a new DIV after 3 seconds of running the script
setTimeout(function() {
let newDiv = document.createElement("div");
document.body.appendChild(newDiv);
}, 3000);
现在,我必须在我的Java程序中获取str变量返回的值,为此我必须使用JavaScriptExecutor运行上述脚本,要让str在javaScriptExecutor中返回值,我必须将最后一行代码更改为{{ 1}}
现在我遇到错误“未捕获的SyntaxError:等待仅在异步函数中有效”
答案 0 :(得分:1)
Chrome控制台支持关键字await
而不将其包装在异步函数中,这说明了为什么代码在控制台中起作用。
但是,在控制台之外,必须始终在标记为await
的功能内使用键盘操作async
。
在程序顶部时,必须使用then
而不是await
,或将所有内容包装到async
函数中并调用它(IIFE模式-立即调用的函数表达式):
(aysnc function() {
// do work
const val = await something();
// do something with val
})();
// OR
something().then(val => { // do something with val });
但是,请勿混合使用await
和then
,因为这是多余的。只需将等待的函数返回的值分配给变量:
const val = await something();
或使用then
进行访问:
something().then(val => { // do something });