代码之家  ›  专栏  ›  技术社区  ›  LasagnaAndroid

为什么fs会这样。以不同顺序返回readFile?

  •  -1
  • LasagnaAndroid  · 技术社区  · 8 年前

    为什么如果你这样做:

    for (var i = 0; i < 5; i++) {
        fs.readFile('file' + i, function(err, data) {
          console.log('file: ', data);
        });
    }
    

    我猜这与node的“异步”事件循环有关,但不确定这是如何工作的。

    3 回复  |  直到 8 年前
        1
  •  1
  •   mscdex    8 年前

    异步 fs 方法利用libuv的线程池,操作系统可以对这些线程的执行进行不同的排序/调度(尤其取决于操作系统使用的调度程序的类型)。

        2
  •  0
  •   Jordan Soltman    8 年前

    这将启动并获取文件,并在每次完成时将数据返回给回调。你永远不知道谁会先完成,谁会先下订单。如果您需要等待所有5个文件,然后再执行某些操作,请查看异步库: https://www.npmjs.com/package/async .

    fs.readFile('file' + i, function(err, data) {
      console.log('file: ', data);
    });
    
        3
  •  0
  •   PratikGandhi    8 年前

    您可以这样做:-

    for (var i = 0; i < 5; i++) {
        // put the statement in try-catch in case some of the files do not exists or
        // you get some other error
        try {
            // to show actual contents of the file instead of a buffer
            console.log(fs.readFileSync('file' + i).toString());
        } catch (error) {
            console.error(error);
        }
    }
    

    我建议不要使用这个,但如果你必须这样做,这是一种方法。您应该签出async.js http://caolan.github.io/async/docs.html#map 如@jordan-s所建议的。