我有此错误:等待仅在异步函数中有效
我的代码:
async function solve(){
var requestUrl = "url";
$.ajax({url: "requestUrl", success: function(result){
if(result.length < 3){
return false;
}else{
if(result.substring(0, 3) == "OK|"){
var ID = result.substring(3);
for(var i=0; i<24; i++){
var ansUrl = "url"+ID;
$.ajax({url: "ansUrl", success: function(ansresult){
if(ansresult.length < 3){
return ansresult;
}else{
if(ansresult.substring(0, 3) == "OK|"){
return ansresult;
}else if (ansresult != "ERROR"){
return ansresult;
}
}
}
});
await sleep(5000); // <-- ERROR
}
}else{
return ansresult;
}
}
},
fail: function(){
return "";
}
});
}
solve();
该函数没有异步,我将其放在开头,但仍然会出现此错误。 我不知道ajax是否有问题
答案 0 :(得分:2)
您正在尝试在该ajax调用的await
回调中使用success
关键字,而不是在async function solve
中使用关键字。使用承诺时,请勿使用success
和fail
回调(通过使用async
/ await
暗示)!
相反,请使用$.ajax
已经返回的承诺,await
,并在没有太多嵌套的情况下编写代码:
async function solve() {
try {
const requestUrl = "url";
const result = await $.ajax({url: requestUrl});
// ^^^^^
if (result.length < 3) {
return false;
} else if (result.substring(0, 3) == "OK|") {
const ID = result.substring(3);
for (let i=0; i<24; i++){
const ansUrl = "url"+ID;
const ansresult = await $.ajax({url: ansUrl});
// ^^^^^
if (ansresult.length < 3) {
return ansresult;
} else if(ansresult.substring(0, 3) == "OK|") {
return ansresult;
} else if (ansresult != "ERROR") {
return ansresult;
}
await sleep(5000); // works here!
}
} else {
return ansresult; // not in scope?!
}
} catch(e) {
return "";
}
}
solve().then(console.log);
答案 1 :(得分:1)
将最外面的ajax调用更改为如下形式:
success: async function(result)
您在不是await
的内部函数中使用async
答案 2 :(得分:0)
使用await
关键字的函数必须是异步函数-您刚刚使父函数异步。
在ajax回调中,只需将success: function(
更改为success: async function(