为了账号安全,请及时绑定邮箱和手机立即绑定

打破请求-承诺的循环

打破请求-承诺的循环

守候你守候我 2022-06-16 10:45:12
/api?id=1&page=每次请求不同的页面时,我都会 遍历这个 url ,直到得到我想要的结果。我不知道如何以及为什么不能从请求中停止循环。async something() {  let results = []  for (let i = 0;i < 999;i++) {    await rp('/api?id=1page='+i).then(string => {     results.push(string)     if(results === 'THE END') {        // break here     }    })  }  Promise.all(results).then(res => {   // do something  })}
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

只有当循环位于当前函数内时,您才能从循环中中断。如果循环在函数之外(例如,.then回调),您就无法摆脱它。


而不是使用.then,将awaited 字符串分配给一个变量并检查它(并确保检查字符串,而'THE END'不是results数组):


async something() {

  const results = [];

  for (let i = 0;i < 999;i++) {;

    const string = await rp('/api?id=1page='+i);

    results.push(string);

    if(string === 'THE END') {

      break;

    }

  }

  // do something with results

}

请注意,由于您将解析的值本身推送到results数组,因此无需调用Promise.all数组。


查看完整回答
反对 回复 2022-06-16
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

考虑到这rp是请求您的网址的功能,这是我能想到的最简单的答案。


let results = []

  for (let i = 0;i < 999;i++) {//if i is greater than or equal 999, the loop will end

    await rp('/api?id=1page='+i).then(string => {

     results.push(string)

     if(results === 'THE END') {

        //do stuffs you need to do

        // break here

        i = 1000;

     }

    })

  }


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号