打破请求-承诺循环
break a loop of request-promise
每次请求不同的页面时,我都会遍历此 url /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
,而是将 await
ed 字符串分配给一个变量并检查它(并确保检查 string 与 '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
。
考虑到 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;
}
})
}
每次请求不同的页面时,我都会遍历此 url /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
,而是将 await
ed 字符串分配给一个变量并检查它(并确保检查 string 与 '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
。
考虑到 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;
}
})
}