等待array.map中的asynchronous进程等待

我使用了一个名为exiftool的node.js包,它基本上是一个名为exiftool的bash脚本的API。 后面的过程是asynchronous的,我很难找出如何在返回所有之前等待asynchronous完成。

这是代码:

MAP.files = MAP.scan.map((scan) => { file = {}; exiftool.metadata(scan, function(error, metadata) { if (metadata) { return file; } file.metadata = metadata; }); return file; }); 

所以,当我尝试访问MAP.files时,结果将是几个空对象。 我明白为什么,但..我怎么能避免这样的不欲望的结果?

谢谢。

如果您asynchronous获得所需结果,则无法返回该结果。 我会解决这个问题(这是未经testing):

 var MapMetadata = function(map, callback) { map.files = {}; var callbackCount = 0; var callbackMaxCount = Object.keys(map.scan).length; var metadataCallback = function(key, metadata) { map.files[key] = metadata; callbackCount++; if (callbackCount == callbackMaxCount && callback != null) callback(map); } for (var i in map.scan) { GetMetadata(i, map.scan[i], metadataCallback); } } var GetMetadata = function(key, scan, callback) { exiftool.metadata(scan, function(error, metadata) { var result = {}; if (metadata) result.metadata = metadata; callback(key, result); }); } MapMetadata(MAP, function(result) { console.log(result); } 

你可以使用promise来组织asynchronous函数的行为,看看https://www.promisejs.org/