Node.js NodeJs异步等待未在for循环中正确等待

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

我的异步函数中有一个循环,它本质上是用来解决CAPTCHA的,但是循环中的等待似乎不起作用

以下是循环的外观:

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;})

}