我有一些代码根据它的索引从API返回文档,我想逐步迭代API。我不知道API会有多少元素,这就是为什么我想要获取数据直到其中一个承诺被拒绝。理想情况下,这将使用生成器来传递值,但我不知道如何使以下段落工作
someapifunc() // Returns a promise
function* apifuncs() {
var index = yield 1;
index++;
yield someapifunc(index - 1);
}
let calls = apifuncs();
apifuncs.next().value.then() // Works
apifuncs.next().value.then() // This won't because index and everything is out of the current scope
答案 0 :(得分:1)
这可能接近你想要的,但是,“生成”的最后一个值将是被拒绝的承诺
function* apifuncs() {
var index = 1;
var ok = true;
var p;
while(ok) {
p = someapifunc(index);
p.catch(() => ok = false);
yield p;
index += 1;
}
}
答案 1 :(得分:0)
从索引100开始,如果API调用没有返回错误,它将打印数据,然后调用一个较低的索引。当API调用返回错误时,"完成"打印出来。
function callAPI(index) {
someapifunc(index).then(
function(data) {
console.log(data);
callAPI(++index);
},
function(err) {
console.log('Done');
}
);
}
callAPI(1);