在nodejs中维护一个variables的值

我想在readFile()中初始化内容variables,并想在nodejs的其他方法中使用这个variables。 里面的readFile()内容variables被初始化,但是这个variables的作用域并不存在。

fs = require('fs'); var flag=0; var content=""; fs.readFile('./file.txt', function (err, data) { if (err) { throw err; } console.log("file reading complete"); content=data; console.log("data:"+content); }); if(content=="") console.log("value not set"); 

编译完这段代码之后,我发现内容variables是在readFile()中初始化的,但是它并没有保持这个值直到代码结束。 我想在整个程序中保持这个内容variables的范围,我怎么做这个任务。

我也尝试了callback方法样式,但是使用callback方法样式在运行exec这样的情况下不工作,

 exec(cmd,function(error,stdout,stderr){ }); 

下面是一段代码,

 var child = require('child_process'); var terminal = child.exec("java Temp"); var output=""; process.stdin.pipe(terminal.stdin); terminal.stdin.on("end", function() { // process.exit(0); }); terminal.stdout.on('data', function (data) { output+=data; // console.log(''+data); this line prints a=10 b=20 }); terminal.stderr.on('data', function (data) { output+=data; }); terminal.stdin.write('10 20'); console.log(""+output); // this line doesn't print any thing. 

编译的文件Temp的来源是

 import java.io.*; import java.util.Scanner; class Temp { public static void main(String[] args) { Scanner s=new Scanner(System.in); int a=s.nextInt(); int b=s.nextInt(); System.out.println("a="+a+" b="+b); } } 

如何使用callback方法来解决这个问题。

由于Node.js是asynchronous的,最后一个if条件被执行,而readFile()操作正在运行,内容仍然是空的。 您将需要添加callback,以便在readFile()操作完成后检查内容值。

您应该能够在程序中的任何位置获取内容variables的值,但在readFile()完成之前它将为空。

 fs = require('fs'); var flag=0; var content=""; fs.readFile('./file.txt', function (err, data) { if (err) { throw err; } console.log("file reading complete"); content=data; check(); // CALLBACK HERE console.log("data:"+content); }); function check() { if(content=="") console.log("value not set"); } } 

UPDATE

现在你已经发布了更多的代码:

我不明白你的代码是做什么的,但是你和最初的问题一样犯了同样的错误。 在任何值被附加到输出variables之前,在和处的console.log行被执行。

如果在这里输出输出variables

 terminal.stdin.on("end", function() { console.log(''+output); // Output here // process.exit(0); }); 

那么你应该得到所需的输出。

看看下面的文章,它解释了Node.js中的asynchronous模型。 为了编写正确的应用程序,了解这一点至关重要。 http://blog.shinetech.com/2011/08/26/asynchronous-code-design-with-node-js/

您也可以使用fs.readFile的同步版本:

  var content = fs.readFileSync("filepath");