javascript - 打破请求-承诺的循环
问题描述
/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
})
}
解决方案
只有当循环位于当前函数内时,您才能从循环中中断。如果循环在函数之外(例如,.then
回调),您就无法摆脱它。
而不是使用.then
,将await
ed 字符串分配给一个变量并检查它(并确保检查字符串,而'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
数组。
推荐阅读
- binary-search - 离散二分搜索主要理论
- javascript - 使用 javascript 创建选项弹出窗口
- r - 如何在 R 中执行词干提取和词形还原?
- javascript - 网页加载后自动键盘“向下箭头”按下
- mysql - MySQL查询从查询结果中获取字符串值
- visual-studio - 如何在基于 nuget 的架构中正确引用库
- ruby - 如何使用 ruby 从字符串中查找和删除字符串?
- facebook - 有没有办法计算每个 Facebook 好友喜欢您的 Facebook 帖子的次数?
- java - 如何在 setIcon 到 JLabel 之前验证 img 文件是否存在,以防清理并构建到 JAR 文件?
- bash - 为什么管道读取和写入同一文件会导致空白文件?