映射和减少后如何访问原始单个条目

How to access original single entries after map and reduce

给定以下函数:

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 是要映射的元素。在 file2、file3 之后...

但是,除了使用递增索引直接对原始文件和结果进行操作之外,还有其他方法吗?

让您的地图函数 return 包含对文件和 promise 的引用的包装器对象。

即....

function doSomethingWithFile(file){
  //do something
  return {file:file, promise:...}
}
files.map(doSomethingWithFiles).reduce(function(sequence, wrapper){
  wrapper.file;
  wrapper.promise;
});

map和reduce没有原地修改,所以原来的files数组依然存在。此外,您可以将第三个参数传递给 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()
});