0

我有一个文件路径列表file_paths,我想检测哪个文件存在。如果存在任何文件,我想阅读那个文件。否则调用另一个函数, not_found例如。

我希望使用async.detect,但是当所有迭代器返回时,我发现无法添加“未找到”回调false

我试过这个,但没有工作。返回未定义并且没有输出。

async = require 'async'

async.detect [1,2,3], (item, callback) ->
  callback true if item == 4
, (result) ->
  console.log result ? result : 'Not Found'

如果还有其他方法可以做到这一点,请将其添加到答案中。

4

2 回答 2

1

从您提到的文档中。

的情况下detect(arr, iterator, callback)

callback(result) - 任何迭代器返回 true 或所有迭代器函数完成后立即调用的回调。 结果将是数组中通过真值测试(迭代器)的第一项,如果没有通过,则为 undefined 值。

从您的问题中,您想找到一种方法来检测列表中是否找不到文件,这可以通过比较resultwithundefined并检查此条件是否为真来完成。

喜欢

async.detect(['file1','file2','file3'], fs.exists, function(result){

     if(typeof(result)=="undefined") {
         //none of the files where found so undefined
     }

});
于 2013-08-25T06:49:12.680 回答
0

我会使用 async.each 并使用 fs.exists 来检测文件是否存在。如果存在,则读取文件,否则调用未找到的函数,然后继续下一项。请参阅下面我写在我头上的示例代码。

async.each(file_paths, processItem, function(err) {
  if(err) {
    console.log(err);
    throw err;
    return;
  }

  console.log('done reading file paths..');

});

function notFound(file_path) {
  console.log(file_path + ' not found..');
}

function processItem(file_path, next) {
  fs.exists(file_path, function(exists) {
    if(exists) {
      //file exists
      //do some processing
      //call next when done
      fs.readFile(file_path, function (err, data) {
        if (err) throw err;

        //do what you want here

        //then call next
        next();
      });

    }
    else {
      //file does not exist
      notFound(file_path);
      //proceed to next item
      next();
    }
  });
}
于 2013-08-25T06:52:59.243 回答