Javascript 等待时出错,函数已包含异步

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;

我有一个错误:wait仅在异步函数中有效

我的代码:

    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可能只是一个例子。