js用异步功能排序

时间:2020-05-24 10:07:38

标签: javascript asynchronous

我使用自定义函数对集合进行排序,并且工作正常。但是,如果我在其中添加一个异步调用,它将停止工作,并且我不知道为什么。

这是工作版本:

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函数之外,并且它起作用了。

0 个答案:

没有答案