Javascript 等待时出错,函数已包含异步
我有一个错误:wait仅在异步函数中有效 我的代码:Javascript 等待时出错,函数已包含异步,javascript,ajax,async-await,Javascript,Ajax,Async Await,我有一个错误:wait仅在异步函数中有效 我的代码: async function solve(){ var requestUrl = "url"; $.ajax({url: "requestUrl", success: function(result){ if(result.length < 3){ return false;
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();
异步函数solve(){
var requestUrl=“url”;
$.ajax({url:requestUrl],success:function(result){
如果(结果长度<3){
返回false;
}否则{
如果(结果子串(0,3)=“OK |”){
var ID=结果子字符串(3);
对于(var i=0;i将最外层的ajax调用更改为如下所示:
成功:异步函数(结果)
您在内部函数中使用的是await
,该函数不是async
使用await
关键字的函数必须是async函数-您刚刚将父函数设置为async
在ajax回调中,只需将success:function(
更改为success:async function)(
您试图在该ajax调用的success
回调中使用await
关键字,而不是在async函数solve
中。在处理承诺时,不要使用success
和fail
回调(通过使用async
/await
)
相反,使用$.ajax
已经返回的承诺,等待它,并编写代码而不需要太多嵌套:
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);
异步函数solve(){
试一试{
const requestUrl=“url”;
const result=await$.ajax({url:requestUrl});
// ^^^^^
如果(结果长度<3){
返回false;
}else if(结果子字符串(0,3)=“OK |”){
const ID=结果子串(3);
for(设i=0;它将清除语法错误,但代码仍然无法工作;$。ajax()
不会注意返回的承诺。您希望等待为您做什么?sleep()
看起来像什么?@Pointy可能只是一个例子。