首页 > 解决方案 > 异步等待 http 请求处理

问题描述

我有一个异步等待函数,它在循环中无序处理项目。在完成之前如何检查数组中的每个项目!日志到控制台?因此,每次链接出错时,它都应该在与之关联的索引号之后记录错误。例如:

0
此处错误https://test123.com/ergaergrhaerha0
1
2
3
此处错误https://test123.com/ergaergrhaerha3
...
完成!

      processArray(ftJsonBySeqAssets);

      async function processArray(arr) {
        for (i in arr) {
          console.log(i)
          await https.get(arr[i].image_link, async (res) => {
            await console.log(res.statusCode, arr[i].image_link)
            if (res.statusCode === 404) {
              console.log('ERROR HERE', arr[i].image_link)
              audience.error.image_link.push(arr[i].image_link)
              audience.error.count++
            }
          });
          await https.get(arr[i].link, async (res) => {
            await console.log(res.statusCode, arr[i].link)
            if (res.statusCode === 404) {
              console.log('ERROR HERE', arr[i].link)
              audience.error.link.push(arr[i].link)
              audience.error.count++
            }
          });
        }
        console.log('done!')
      }

日志:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
done!
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1
ERROR HERE https://test123.com/ergaergrhaerha1

标签: javascriptnode.jsasynchronousasync-await

解决方案


看起来好像https.req没有返回一个承诺,所以你必须自己构造一个然后等待:

 const res = await new Promise(resolve => https.get(arr[i].link, resolve));     
 if (res.statusCode === 404) {
  //...
 }
 //...

推荐阅读