javascript – 未捕获的SyntaxError:await仅在async函数中有效(虽然它在异步函数中…)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 未捕获的SyntaxError:await仅在async函数中有效(虽然它在异步函数中…),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3634字,纯文字阅读大概需要6分钟。
内容图文
所以我不知道是什么导致了这个问题,我花了至少30分钟搜索谷歌并尝试不同的东西没有解决方案.我已经定义了一个异步函数,我试图在它内部使用await但它给了我
Error: Uncaught SyntaxError: await is only valid in async function
这是代码:
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函数的成功函数中使用等待(这是不可能的,不能使这个函数同步,但现在因为你的代码混合了回调/异步,你不是能够解决SolveRecaptchaV2的原始Promise.你将异步与旧的回调混合.)你的代码本质上是这样做的:
SolveRecaptchaV2 => Ajax Request => Ajax Request Done, Firing callback
V V
Returning Returning (But nothing cares about this return)
如果您正在使用异步功能,请尝试尽可能多地使用异步. $.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.
内容总结
以上是互联网集市为您收集整理的javascript – 未捕获的SyntaxError:await仅在async函数中有效(虽然它在异步函数中…)全部内容,希望文章能够帮你解决javascript – 未捕获的SyntaxError:await仅在async函数中有效(虽然它在异步函数中…)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。