【问题标题】:Sort array based on asynchronous method基于异步方法对数组进行排序
【发布时间】:2018-07-11 22:36:41
【问题描述】:

我正在使用Ionic Native 读取用户设备中的文件,但我需要按修改日期对它们进行排序。

读取文件的方法返回Promise<Entry[]>。要找出修改日期,我需要调用EntrygetMetadata 方法,该方法具有以下签名:

getMetadata(successCallback: MetadataCallback, errorCallback?: ErrorCallback): void;

然后在成功回调中,我可以访问 Metadata 对象,该对象具有排序所需的 modificationDate 属性。

如果能得到任何帮助,我将不胜感激。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 制作你所有的异步,将它们存储在某个地方,然后排序......
  • Promise.all(asyncCalls.map(() => new Promise((resolve, reject) => getMetadata((...args) => resolve(...args)) 可能是这样的
  • 或者只是承诺getMetadata

标签: javascript typescript ionic3 ionic-native


【解决方案1】:

您将从promisifying 开始getMetadata 方法:

function getMetadataPromise(entry) {
    return new Promise((resolve, reject) => {
        entry.getMetadata(resolve, reject);
    });
}

然后您可以在循环中使用它并等待所有元数据,之后您可以按它对数组进行排序:

readEntries().then(entries =>
    Promise.all(entries.map(entry =>
        getMetadataPromise(entry).then(metadata => {
            entry.metadata = metadata;
            return entry;
        })
    ))
).then(entries =>
    entries.sort((a, b) => a.metadata.num - b.metadata.num) // or whatever
).then(sortedEntries => {
    console.log(JSON.stringify(sortedEntries));
}, console.error);

【讨论】:

  • 我不得不稍微调整一下并添加一些类型,但它有效,谢谢!
猜你喜欢
  • 2018-10-23
  • 2020-06-20
  • 2021-01-13
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
相关资源
最近更新 更多