基于异步方法对数组进行排序
Sort array based on asynchronous method
我正在使用 Ionic Native 读取用户设备中的文件,但我需要按修改日期对它们进行排序。
读取文件的方法returnsPromise<Entry[]>
。要找出修改日期,我需要调用 Entry
的 getMetadata
方法,该方法具有以下签名:
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);
我正在使用 Ionic Native 读取用户设备中的文件,但我需要按修改日期对它们进行排序。
读取文件的方法returnsPromise<Entry[]>
。要找出修改日期,我需要调用 Entry
的 getMetadata
方法,该方法具有以下签名:
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);