我正在尝试在量角器 ElementArrayFinder
上实现一种排序方法。众所周知,所有量角器方法都返回承诺。所以我的排序方法有一个条件取决于承诺的解决。我正在为 async/await
使用节点插件,以使其与低于 6 的 node.js 版本兼容。(这里是插件: https ://www.npmjs.com/package/asyncawait)
这是我的代码,其中 this
是 ArrayElementFinder
:
var asyncCompare = async(function(a, b) {
let x = await (a.getText());
let y = await (b.getText());
console.log(x.localeCompare(y));
return x.localeCompare(y);
});
var sortTheArray = async(function(arrayOfElementFinders) {
return await (arrayOfElementFinders.sort(asyncCompare));
});
this.then((elements) => {
let arrayOfElementFinders = [elements[0], elements[1], elements[2]];
let sortedArray = sortTheArray(arrayOfElementFinders);
console.log('array sorted');
});
不幸的是,计时执行不是我所期望的。打印: array sorted
发生在比较打印 x.localeCompare(y)
之前。知道我做错了什么吗?知道如何实现我的目标吗?
非常感谢您的帮助
原文由 quirimmo 发布,翻译遵循 CC BY-SA 4.0 许可协议
sort
不接受异步回调。它期望一个数值作为返回值,而不是一个承诺;它确实返回一个数组而不是一个承诺。没有办法解决这个问题(尽管可以实现自定义异步排序算法——甚至是并行排序算法)。但无论如何,这是非常低效的。在每个排序步骤中异步获取比较值会很慢 - 并且它会多次获取每个元素的相同值。不要那样做。相反,使用 Schwartzian 变换 来获取要排序的值,然后(同步)排序,然后使用结果。
你应该做