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

时间:2018-02-01 14:49:25

标签: javascript typescript ionic3 ionic-native

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

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

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

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

我很感激我能得到的任何帮助。

1 个答案:

答案 0 :(得分: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);