与外部源异步排序

Sort asynchronously with external source

我想按 Typescript 中的克隆对我的 Github 回购进行排序
普通 js 中的等效项是

repos.sort(async (a, b) => {
  (await insights.traffic.clones(user, b.name, username, password)).uniques -
    (await insights.traffic.clones(user, a.name, username, password)).uniques;
});

但是 Array.prototype.sort() 不适用于 async/await

reposhttps://api.github.com/users/<user>/repos
insightsimport * as insights from 'github-insights' Docs for clones

这会将回购按降序排列为唯一克隆

它会获取我帐户的每个回购协议,然后用 https://api.github.com/repos/<user>/<repo>/traffic/clones

对其进行排序

有什么办法让它起作用吗?

使用fast-sort
我想到了这个

const sorted = sort(repos).desc([
  async (u) => await (await insights.traffic.clones(user, u.name, username, password)).uniques
]);

但这根本没有排序,它只是 repos

尝试先获取所有信息,将其放入数组中,然后排序。

伪代码:

async function getClonesForRepo(repo) {
 // Do your thing and return a number
}

const repoClones = new Map();
for(const repo of repos) {
  repoClones.set(repo.name, await getClonesForRepo(repo));
}

const sorted = repos.sort(
  (a, b) => repoClones.get(a.name) - repoClones.get(b.name)
);