产生承诺直到被拒绝

时间:2017-01-24 19:05:27

标签: javascript ecmascript-6 promise

我有一些代码根据它的索引从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

2 个答案:

答案 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);