gpt4 book ai didi

javascript - 将函数拆分为更小的函数

转载 作者:行者123 更新时间:2023-12-01 00:35:04 25 4
gpt4 key购买 nike

我有一个从 API (getFollowedArtistsAdapter) 获取数据的函数,直到它不是结果的最后一页。我想将这一切作为一个 promise 。但是当我看到这个函数时,它似乎难以辨认并且不必要地复杂。

const getArtists = () => {
let afterGet = null;
let items = [];

return new Promise(function promiseCallback(resolve, reject) {
const afterParam = afterGet ? {limit: 50, after: afterGet} : {limit: 50};

getFollowedArtistsAdapter(afterParam)
.then((data) => {
items = items.concat(data.artists.items);

if(data.artists.next){
afterGet = data.artists.items[data.artists.items.length - 1].id;
promiseCallback(resolve, reject);
} else {
return updateStoreArtists(items).then(() => resolve());
}
});
});
}

有什么想法如何分割它吗?

最佳答案

考虑调用getFollowedArtistsAdapter ,其中return如果需要,最后会递归调用自身(或 updateStoreArtists ),而不会创建不必要的新 Promise:

const getArtists = () => {
let items = [];
return getFollowedArtistsAdapter({ limit: 50 })
.then((data) => {
const thisItems = data.artists.items;
items = items.concat(thisItems);
if (data.artists.next){
const after = thisItems[thisItems.length - 1].id;
return getFollowedArtistsAdapter({limit: 50, after });
}
})
.then(() => {
return updateStoreArtists(items);
});
}

这样,全部getFollowedArtistsAdapter通话将在第.then内完成。当第一个.then解决,items将完全填充,第二个 .then将返回 updateStoreArtists 的 Promise .

避免 explicit promise construction antipattern .

关于javascript - 将函数拆分为更小的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58197268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com