javascript - 打破请求- promise 的循环

标签 javascript node.js asynchronous async-await request-promise

每次请求不同的页面时,我都会循环访问此网址 /api?id=1&page= ,直到得到我想要的结果。

我不明白如何以及为什么我无法从请求中停止循环。

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

最佳答案

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

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

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 数组,因此无需在数组。

关于javascript - 打破请求- promise 的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61071934/

相关文章:

node.js - 通过 Node 请求包递归使用 async/await

c# - 标识异步方法的表达式会导致编译器警告

javascript - 在 Redux 中调度多个异步操作的正确方法

javascript - 一次删除多个 Div 元素 -- JavaScript

javascript - 有没有办法找到匹配两个不同填充的文档并在 findOne() 中获取他的文档?

node.js - 扩展 Node.js 应用程序 - 哪个提供商?

java - Java如何保证ListenableFuture中future.isDone()时回调被调用

javascript - include 语句在 Google 脚本中不起作用

javascript - 将所有图像与 div 中的间隙相匹配

node.js - 错误时未生成 npm-debug.log