以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - JavaScript 代码题
56. 调取有分页的API

使用常规循环解决:

async function fetchListWithAmount(amount: number = 5) {  let lastItemId: number = undefined;  let result: Array<{ id: number }> = [];  while (result.length < amount) {    const { items } = lastItemId ? await fetchList(lastItemId) : await fetchList();    if (items.length === 0) {      break;    }    lastItemId = items[items.length - 1].id;    result = result.concat(items);  }  return result.slice(0, amount);}

使用async iterators解决:

async function* itemGenerator() {  let lastItemId: number = undefined;  while (true) {    const { items } = lastItemId ? await fetchList(lastItemId) : await fetchList();    if (items.length === 0) {      break;    }    lastItemId = items[items.length - 1].id;    for (const item of items) {      yield item;    }  }}async function fetchListWithAmount(amount: number = 5) {  const result = [];  const iterator = itemGenerator();  for await (const item of iterator) {    if (result.length >= amount) {      break;    }    result.push(item);  }  return result;}

使用async generators解决:

async function* itemGenerator(lastItemId?: number) {  const { items } = lastItemId ? await fetchList(lastItemId) : await fetchList();  if (items.length === 0) {    return;  }  const newLastItemId = items[items.length - 1].id;  for (const item of items) {    yield item;  }  yield* itemGenerator(newLastItemId);}async function fetchListWithAmount(amount: number = 5) {  const iterator = itemGenerator();  const result = [];  for (let i = 0; i < amount; i++) {    const { done, value } = await iterator.next();    if (done) {      break;    }    result.push(value);  }  return result;}