递归调用异步API调用

Ste*_*ler 6 javascript recursion promise ecmascript-2017 angular

我正在尝试从API中获取数据,每次调用只返回1000个项目,我想以递归方式执行此操作,直到获得所有数据.

我事先不知道有多少项目,所以每次通话后我都要检查

如果调用是同步的,我会使用这样的东西:

function fetch(all, start) {
    const newData = getData(start, 1000);
    all = all.concat(newData);
    return (newData.length === 1000) ? fetch(all, all.length) : all;
}
Run Code Online (Sandbox Code Playgroud)

但是,getData()这里的调用是异步的.使用a Promise.all()不起作用因为我事先不知道我需要多少次调用所以我无法准备一系列调用.

我有这样的感觉,我可以用发电机或用async/ 解决这个问题,await但我不知道怎么做.谁能指出我正确的方向?

如果它有所作为,我正在使用Angular 4.

Est*_*ask 5

这取决于您的情况如何完成.考虑到getData返回一个承诺,它是:

async function fetch(all, start) {
    const newData = await getData(start, 1000);
    all = all.concat(newData);
    return (newData.length === 1000) ? await fetch(all, all.length) : all;
}
Run Code Online (Sandbox Code Playgroud)