node.js如何用单进程实现asynchronouscallback

我不知道节点如何实现它的惊人的想法。 我使用它时有一个问题。
我必须读取四个文件file1.js file2.js file3.js file4.js并将它们连接成一个大的JavaScript文件result.js 。 保持秩序是很重要的。

所以使用readFileSync而不是readFile是正常的。
我知道这是一个不好的解决scheme。 任何人都有一个好主意来做到这一点?

问: node.js可以同时读取四个文件吗?

希望有人能解释node.js的原理,以及何时process.nextTick会被解雇。

答:是的,节点可以同时读取4个文件。

我的答案是,这取决于你的情况,同步或asynchronous阅读文件。 如果是configuration数据,或者文件可以被caching,我build议只是同步,这很容易,而且只能做一次。 所以你不会在周围等很久 初始化的长时间操作是典型的,并且可以使得事情在长期更有效。 也就是说,按顺序读取四个文件,这样你的程序可以在后台做其他事情并不难。 我将处理每个同步和asynchronous示例,并添加一个编辑。

/* jshint node:true*/ var fs = require('fs'); function readFilesSync(fileNames) { 'use strict'; var results = ''; for (var i = 0; i < fileNames.length; i++) { results += fs.readFileSync(fileNames[i]); } return results; } function readFiles(fileNames, callback) { 'use strict'; var results = ''; function readFile(index) { if (index < fileNames.length) { fs.readFile(fileNames[index], function (err, data) { results += data; readFile(index + 1); }); } else { callback(results); } } readFile(0); } function readAllFilesAtOnce(fileNames, callback) { 'use strict'; var results = {}; var numFiles = fileNames.length; function callBackWrapper() { var resultsOrdered = ''; for (var i = 0; i < fileNames.length; i++) { resultsOrdered += results[fileNames[i]]; } callback(resultsOrdered); } function readFileAsync(fileName) { fs.readFile(fileName, function (err, data) { results[fileName] = data; numFiles--; if (numFiles === 0) { callBackWrapper(); } }); } for (var i = 0; i < fileNames.length; i++) { readFileAsync(fileNames[i]); } } function doSomethingWithTheData(data) { 'use strict'; console.log('Results async: ' + data); } function doSomethingWithTheData2(data) { 'use strict'; console.log('Results async all at once: ' + data); } var fileNamesArray = ['blah.js', 'file.js', 'hello.txt']; console.log('The results sync: ' + readFilesSync(fileNamesArray)); readFiles(fileNamesArray, doSomethingWithTheData); readAllFilesAtOnce(fileNamesArray, doSomethingWithTheData2); 

编辑:在那里我添加了一次读取所有文件的方法。

Process.nextTick只是在事件循环下一次处理这个函数。 EX:

 process.nextTick(function() { console.log('never printed out'); }); while(true); 

例2:

 process.nextTick(function() { console.log('printed last'); }); console.log('printed first');