我正在使用一个具有 3 个阶段的软件:
第一阶段、第二阶段和第三阶段。
在第一阶段,我使用 exiftool 从文件中提取元数据,但该过程是异步的,因此我需要在调用下一阶段之前等待结果,为此,我使用以下代码:
MAP.files = files.scan((file) => {
return new Promise((resolve) => {
exiftool(file, (error, metadata) => {
file.error = error
file.metadata = metadata
resolve(file)
});
});
});
返回的是带有一堆对象的数组,如下所示:
[ Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
.....
]
第二阶段不是异步的,我需要像前一阶段一样使用 array.map 访问文件,如下所示:
MAP.files.text = MAP.files((file) => {
//To be able to access the real file, i need use then, like this:
file.then((realFile) => {
console.log(realFile) // real file with properties
});
});
在下一阶段(第 3 阶段),我想做同样的事情:
MAP.files.final = MAP.files.text((file) => {
});
我的问题是:THEN 函数,我不能逃避它吗?我需要在第一阶段之后的每个阶段使用 file.then 吗?
最佳答案
看起来使用 Promise.all
会对您有所帮助。
例如如果你有一系列的 promise ...
var p = [p1, p2, p3]
Promise.all(p).then( (results) =>
/* results is an array of the results of each promise in p */
);
参见http://bluebirdjs.com/docs/api/promise.all.html和 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all有关 Promise.all
关于javascript - 在数组映射内使用新的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35320761/