перерыв oop запроса-обещания - PullRequest
0 голосов
/ 07 апреля 2020

Я перебираю этот URL /api?id=1&page= каждый раз, запрашивая другую страницу, пока не получу желаемый результат.

Я не могу понять, как и почему я не могу остановить l oop из запроса.

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 ]

1 голос
/ 07 апреля 2020

Вы можете выйти из режима oop только тогда, когда l oop равно внутри текущей функции. Если l oop находится за пределами функции (например, обратный вызов .then), вы не можете выйти из него.

Вместо использования .then присвойте строку await ed переменную и проверьте ее (и обязательно проверьте string против 'THE END', а не results array):

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 для массива.

0 голосов
/ 07 апреля 2020

учитывая, что rp - это функция, которая запрашивает ваш URL, это самый простой ответ, который я могу придумать.

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