javascript排序需要异步调用



我想对应该返回["b", "a"]的id进行排序,在一个人为的例子中,下面的点在实际代码中被强制为异步。我试过这个,但不能阻止它等待比较完成,而我等待然后:

async function test(a, b) {
return await (async (a, b) => {
let retval;
let text_a = await read("a");
let text_b = await read("b");
retval = (text_a.length - text_b.length);
return retval;
})(a, b);
}
let ids = ["a", "b"]
ids = ids.sort(
function f(a, b) {
let retval = test(a, b).then(result => result);
return retval;
}
);
console.log(ids)
async function read(p) {
if(p == "a") {
return "aaaaaaaaaaaaaaaaa";
}
if (p == "b") {
return "bbbbbbbb";
}
}

排序测试函数被调用的次数可能比数组中的值要多。因此,您需要首先从read函数中检索所有值。

即使性能不是问题,数组。Sort不支持异步测试功能。

async function read(p) {
if(p === 'a') return 'aaaaaaaaaaaaaaaaa';
if (p === 'b') return 'bbbbbbbb';
}
(async () => {
let ids = ['a', 'b'];
(await Promise.all(ids.map(id=>read(id))))
.forEach((v,i) => ids[i] = {id:ids[i], v});
ids = ids.sort((a,b) => a.v.length - b.v.length).map(i=>i.id);
console.log(ids);
})();

最新更新