【发布时间】:2021-10-18 18:31:39
【问题描述】:
我的await for asyncCall() 在inputEntriesNotOnScreen 函数中完成,尽管它在异步函数中,但它不起作用。我收到此错误:
未捕获的语法错误:await 仅在异步函数和模块的顶层主体中有效
错误的第二部分是什么意思?
function resolve1MS() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 1);
});
}
async function asyncCall() {
let clicked = false;
while( !clicked){
await resolve1MS();
if($('.ui-menu-item').length != 0){
$('.ui-menu-item')[0].click();
clicked = true;
$matrix = $("table.timesheet tbody tr");
return {
lastRow: $matrix.last()
}
}
}
}
async function inputEntriesNotOnScreen($matrix, notFoundInInitialSearch){
let lastRow = undefined;
notFoundInInitialSearch.forEach(function(item, index){
console.log(item, index);
if( lastRow == undefined){
lastRow = $matrix.last();
}
else{
lastRow = await asyncCall();
}
lastRow.find('.search')[0].click();
let $searchBar = $('.ui-autocomplete-input');multiple times
$($searchBar[index]).val(item[0][0]);
$searchBar[index].dispatchEvent(new Event('input'));
});
}
【问题讨论】:
-
你怎么打电话给
inputEntriesNotOnScreen? -
您正在为非异步的 forEach 创建一个内部函数。将
forEach替换为for循环。 -
指的是 ES2015 Module 语法。从技术上讲,您可以在模块的顶层使用
await,而不必编写异步函数。见the proposal that made it happen。它将包含在 ES2022 中。 -
@AlbertoRivera 谢谢我很困惑,忘记了我实际上是在创建另一个函数!
标签: javascript asynchronous async-await