![](/img/trans.png)
[英]Uncaught SyntaxError: await is only valid in async function in async function
[英]Uncaught SyntaxError: await is only valid in async function (its in an async function though…)
所以我不知道是什么導致了這個問題,我花了至少 30 分鍾搜索谷歌並嘗試不同的東西,但沒有解決方案。 我已經定義了一個async
函數,我試圖在它里面使用await
但它給了我
錯誤:未捕獲的語法錯誤:等待僅在異步函數中有效
這是代碼:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function SolveRecaptchaV2(APIKey, googleKey, pageUrl, proxy, proxyType){
var requestUrl = "https://2captcha.com/in.php?key=" + APIKey + "&method=userrecaptcha&googlekey=" + googleKey + "&pageurl=" + pageUrl + "&proxy=" + proxy + "&proxytype=";
switch (proxyType) {
case 'HTTP':
requestUrl = requestUrl + "HTTP";
break;
case 'HTTPS':
requestUrl = requestUrl + "HTTPS";
break;
case 'SOCKS4':
requestUrl = requestUrl + "SOCKS4";
break;
case 'SOCKS5':
requestUrl = requestUrl + "SOCKS5";
break;
}
$.ajax({url: requestUrl, success: function(result){
if(result.length < 3){
return false;
}else{
if(result.substring(0, 3) == "OK|"){
var captchaID = result.substring(3);
for(var i=0; i<24; i++){
var ansUrl = "https://2captcha.com/res.php?key=" + APIKey + "&action=get&id=" + captchaID;
$.ajax({url: ansUrl, success: function(ansresult){
console.log(ansresult);
if(ansresult.length < 3){
return ansresult;
}else{
if(ansresult.substring(0, 3) == "OK|"){
return ansresult;
}else if (ansresult != "CAPCHA_NOT_READY"){
return ansresult;
}
}
}
});
await sleep(1000);
}
}else{
return ansresult;
}
}
},
fail: function(){
return "";
}
});
}
編輯:: 現在,當我將 $.ajax 回調函數設為異步函數時,$.ajax 調用都不起作用,並且我在其中創建的任何 console.log 都不會顯示在控制台中......我沒有收到任何錯誤雖然
所以這里的主要問題是,你在$.ajax
函數的成功函數中使用 await(這是不可能的,如果不使這個函數也異步,但現在因為你的代碼混合了回調/異步,你不是能夠解決SolveRecaptchaV2
的原始承諾。您將異步與舊回調混合在一起。)您的代碼本質上是在做:
SolveRecaptchaV2 => Ajax Request => Ajax Request Done, Firing callback
V V
Returning Returning (But nothing cares about this return)
如果您使用 async 函數,請嘗試盡可能多地使用 async。 $.ajax
將返回一個 promise,因此我們可以等待它,並保持我們的函數完全異步:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function SolveRecaptchaV2(APIKey, googleKey, pageUrl, proxy, proxyType){
var requestUrl = "https://2captcha.com/in.php?key=" + APIKey + "&method=userrecaptcha&googlekey=" + googleKey + "&pageurl=" + pageUrl + "&proxy=" + proxy + "&proxytype=";
switch (proxyType) {
case 'HTTP':
requestUrl = requestUrl + "HTTP";
break;
case 'HTTPS':
requestUrl = requestUrl + "HTTPS";
break;
case 'SOCKS4':
requestUrl = requestUrl + "SOCKS4";
break;
case 'SOCKS5':
requestUrl = requestUrl + "SOCKS5";
break;
}
try {
await result = await $.ajax({url: requestUrl});
if(result.length < 3) {
return false;
} else {
if(result.substring(0, 3) == "OK|") {
var captchaID = result.substring(3);
for(var i=0; i<24; i++){
var ansUrl = "https://2captcha.com/res.php?key=" + APIKey + "&action=get&id=" + captchaID;
var ansResult = await $.ajax({url: ansUrl});
console.log(ansResult);
if(ansResult.length < 3) {
return ansResult;
} else {
if(ansresult.substring(0, 3) == "OK|") {
return ansResult;
} else if (ansResult != "CAPCHA_NOT_READY") {
return ansResult;
}
}
await sleep(1000);
}
} else {
// ansResult is not defined here, not sure what you want to return here (May want to return false, or an empty string):
return ansResult;
}
}
} catch (err) {
//On ajax failure, return empy string. (May want to return false here, to fall inline with your "if (result.length < 3)" statement above.)
return "";
}
}
現在我們的鏈看起來像這樣:
SolveRecaptchaV2 => Ajax Request
=> Ajax Request Done
=> Get Answer URL
=> Sleep
=> Get Answer URL
=> Sleep (...loop)
=> Resolve promise of SolveRecaptchaV2.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.