我有一个 api,它将返回一个用于获取更多数据的游标。我是这样模拟的:
function fetch(n) {
return Promise.resolve({
results: [n],
next: next < 10 && n + 1,
})
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是弄清楚如何将 async/await 与生成器一起使用,以便与这个 api 进行交互。
这基本上是我的原型:
async function* api(url) {
let result = await fetch(url)
yield result
while (result.next) {
result = await fetch(result.next)
yield result
}
}
Run Code Online (Sandbox Code Playgroud)
这个想法是我应该能够创建一个异步生成器并从该生成器中产生,以便遍历游标:
async function main() {
const gen = api(0)
const zero = await gen.next()
console.log(zero.result)
const one = await gen.next()
console.log(one.result)
const rest = await Promise.all([...gen])
console.log(rest.map(r => r.result))
}
Run Code Online (Sandbox Code Playgroud)
考虑到所有因素,我认为这是处理分页数据的一种非常好的方式,并且能够提取所有数据[...gen]非常酷。 …