给出以下功能:
var files = [file1,file2,file3]
files.map(doSomethingWithFile).reduce(function (sequence, filePromise) {
return sequence.then(function () {
return filePromise;
}).then(function (content, err) {
//doSomethingWith(file,content) <-- How to access current file (either file1,file2 or file3)
});
如何访问文件中的单个元素'file'? 由于'then'保证对它进行排序,我知道第一次进入最后一个时,file1是要映射的元素。在那个文件2之后,file3 ......
但是,除了增加索引以直接对原始文件和结果执行某些操作之外,还有其他方法吗?
答案 0 :(得分:1)
让map函数返回一个包装器对象,该对象包含对文件和promise的引用。
...即
function doSomethingWithFile(file){
//do something
return {file:file, promise:...}
}
files.map(doSomethingWithFiles).reduce(function(sequence, wrapper){
wrapper.file;
wrapper.promise;
});
答案 1 :(得分:1)
Map和reduce不会在原地修改,因此原始文件数组仍然存在。此外,您可以传递第三个参数reduce,即当前索引。您可以使用此参数访问原始数组的相应元素
var files = [file1,file2,file3]
files
.map(doSomethingWithFile)
.reduce(function(sequence, filePromise, i) {
return sequence.then(function() {
return filePromise;
}).then(function (content, err) {
doSomethingWith(file[i], content) // i comes from .reduce()
});