等待 array.map 等待中的异步进程
Wait async process inside array.map wait
我正在使用一个名为exiftool的node.js包,它基本上是一个名为exiftool的bash脚本的API。后面的过程是异步的,我很难弄清楚如何在返回所有内容之前等待异步完成。
这就是代码:
MAP.files = MAP.scan.map((scan) => {
file = {};
exiftool.metadata(scan, function(error, metadata) {
if (metadata) { return file; }
file.metadata = metadata;
});
return file;
});
因此,当我尝试访问 MAP.files 时,结果将是几个空对象。我明白为什么,但是..我怎样才能避免这种不想要的结果?
谢谢。
您可以使用 promise 来组织异步函数行为,请查看 https://www.promisejs.org/
如果异步
获取,则无法返回所需的结果。 我会这样解决它(这是未经测试的):
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);
}
相关文章:
- 在等待异步任务时永久循环
- 如何等待异步请求完成
- 等待异步结果的 Chrome 系统调用
- 请等待异步操作 (firebase) 调用完成,然后再加载网页
- Jasmine - 等待异步库完全加载,然后再执行测试
- 是否可以让其他 javascript 事件侦听器等待异步事件
- 等待异步 Javascript 函数结束检索结果(延迟?)
- 如何等待异步回调函数集
- 什么'这是让函数返回等待异步操作完成的最佳方法
- ExtJS 4拖放等待异步操作,然后再决定是否完成拖放
- Parse.com等待异步出现问题
- 力量角器's on准备等待异步http请求
- 等待异步函数完成而不添加回调
- 正在等待异步调用,无法使用ajax
- Javascript等待异步从Firebase检索数据
- Node.js:等待异步调用的响应
- 如何让Javascript在继续之前等待异步调用
- 等待异步函数完成后再继续
- 如何在调用回调之前等待异步创建的对象完全可用?
- 我如何在Javascript中等待异步事件