我使用自定义函数对集合进行排序,并且工作正常。但是,如果我在其中添加一个异步调用,它将停止工作,并且我不知道为什么。
这是工作版本:
async _sort(order, grouping) {
await this._getCollection();
this._collection.sort(function (x, y) {
var jsonX = JSON.parse(x);
var jsonY = JSON.parse(y);
/*
* Groupings are always sorted alphabetically no mat-
* ter the order, except for date...
*/
if (!((grouping === null) || (grouping === CollectionViewBuilder.DATE()))) {
var groupX = jsonX[grouping];
var groupY = jsonY[grouping];
if (!(groupX === groupY)) {
return groupX.localeCompare(groupY);
}
}
/*
* ...then items are sorted chronologically, depen-
* ding on the order.
*/
var dateX = Date.parse(jsonX.date);
var dateY = Date.parse(jsonY.date);
return (order === CollectionViewBuilder.DESC() ? dateY - dateX : dateX - dateY);
});
}
这就是我想要做的:
async _sort(order, grouping) {
await this._getCollection();
async function sortGroupingOrder (x, y) {
var jsonX = JSON.parse(x);
var jsonY = JSON.parse(y);
/*
* Groupings are always sorted alphabetically no mat-
* ter the order, except for date...
*/
if (!((grouping === null) || (grouping === CollectionViewBuilder.DATE()))) {
var groupX = await this._pageBuilder.translator.getTranslatedWord(jsonX[grouping]);
var groupY = await this._pageBuilder.translator.getTranslatedWord(jsonY[grouping]);
if (!(groupX === groupY)) {
return groupX.localeCompare(groupY);
}
}
/*
* ...then items are sorted chronologically, depen-
* ding on the order.
*/
var dateX = Date.parse(jsonX.date);
var dateY = Date.parse(jsonY.date);
return (order === CollectionViewBuilder.DESC() ? dateY - dateX : dateX - dateY);
}
this._collection.sort(sortGroupingOrder.bind(this));
}
我也做了一个jsFiddle:https://jsfiddle.net/GaetanL/qh34rwuv/8/
编辑:我寻找了qxg提供的答案,并将我的异步处理置于sort函数之外,并且它起作用了。