Node.js NodeJs异步等待未在for循环中正确等待
我的异步函数中有一个循环,它本质上是用来解决CAPTCHA的,但是循环中的等待似乎不起作用 以下是循环的外观:Node.js NodeJs异步等待未在for循环中正确等待,node.js,for-loop,asynchronous,async-await,Node.js,For Loop,Asynchronous,Async Await,我的异步函数中有一个循环,它本质上是用来解决CAPTCHA的,但是循环中的等待似乎不起作用 以下是循环的外观: for(var i=0; i < 7; i++){ fileName = `./tasks/myfile-${i.toString()}.json` // SOLVE reCAPTCHAs const requestId = await initiateCaptchaRequest(apiKey); const response
for(var i=0; i < 7; i++){
fileName = `./tasks/myfile-${i.toString()}.json`
// SOLVE reCAPTCHAs
const requestId = await initiateCaptchaRequest(apiKey);
const response = await pollForRequestResults(apiKey, requestId);
console.log(`SOLVED CAPTCHA - ${response}`);
// Should run this function AFTER the response has been received
await enter(response);
}
我的问题是,上面看到的循环应该运行InitiateCaptCharRequest函数来获取请求ID,然后运行pollForRequestResults函数来获取响应,然后运行enter函数
但现在等待似乎不起作用,在InitiateCaptChareRequest函数运行后,pollForRequestResults函数立即运行,返回JSON解析错误,这显然是因为requestId尚未收集,并在RequestCaptCharsResults函数中使用
感谢您的帮助 我试图重现你的问题,但似乎对我来说效果很好。但我认为问题在于requestCaptchaResults函数
等待在for循环中不起作用,因为for循环不是异步的 所以你必须做出承诺
const newFunc = ()=>{
return new Promise(async (resolve,reject)=>{
// SOLVE reCAPTCHAs
const requestId = await initiateCaptchaRequest(apiKey);
const response = await pollForRequestResults(apiKey, requestId);
console.log(`SOLVED CAPTCHA - ${response}`);
// Should run this function AFTER the response has been received
const data = await enter(response);
resolve(data);
})
}
Yourfunction(){
val = []
for(var i=0; i < 7; i++){
fileName = `./tasks/myfile-${i.toString()}.json`
val.push(**your arguments)
}
return new Promise.all(val).then((res)=>{return res;}).catch((err)=> {return err;})
}
常量newFunc=()=>{
返回新承诺(异步(解析、拒绝)=>{
//解决雷帕查斯
const requestId=wait initiateCaptchaRequest(apiKey);
const response=await pollForRequestResults(apiKey,requestId);
log(`SOLVED CAPTCHA-${response}`);
//应在收到响应后运行此功能
常数数据=等待输入(响应);
解析(数据);
})
}
Yourfunction(){
val=[]
对于(变量i=0;i<7;i++){
fileName=`./tasks/myfile-${i.toString()}.json`
val.push(**您的参数)
}
return new Promise.all(val).then((res)=>{return res;}).catch((err)=>{return err;})
}
您能提供任何种类的工作示例吗???@SkorpEN帖子中链接了一个工作示例,但不是工作示例。工作示例是您的项目托管在某个地方,或者使用代码示例来显示您的问题。指向web文章不是一个有效的例子。这只是问题描述。您有时可以在author github中找到工作示例,但并不总是这样。
(async ()=>{
for(var i=0; i < 7; i++){
await initiateCaptchaRequest(i);
console.log(i)
}
})()
function initiateCaptchaRequest(i){
console.log('sdas'+i);
return new Promise((resolve, reject)=>{
setTimeout(()=>{resolve();}, 4000);
});
}
sdas0
0
sdas1
1
sdas2
2
sdas3
3
sdas4
4
sdas5
5
sdas6
6
const newFunc = ()=>{
return new Promise(async (resolve,reject)=>{
// SOLVE reCAPTCHAs
const requestId = await initiateCaptchaRequest(apiKey);
const response = await pollForRequestResults(apiKey, requestId);
console.log(`SOLVED CAPTCHA - ${response}`);
// Should run this function AFTER the response has been received
const data = await enter(response);
resolve(data);
})
}
Yourfunction(){
val = []
for(var i=0; i < 7; i++){
fileName = `./tasks/myfile-${i.toString()}.json`
val.push(**your arguments)
}
return new Promise.all(val).then((res)=>{return res;}).catch((err)=> {return err;})
}