基于异步方法对数组进行排序

Sort array based on asynchronous method

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

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

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

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

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

您将从 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);