我能够生成Python child_process并将从Python返回的数据写入Node中的控制台。但是,我无法在Node中的回调函数中返回数据。我认为这是因为回调函数是异步的,所以服务器在回调返回之前将结果返回给浏览器。
test_server.js
var sys = require('sys');
var http = require('http');
var HOST = '127.0.0.1';
var PORT = 3000;
function run(callBack) {
var spawn = require('child_process').spawn,
child = spawn('python',['test_data.py']);
var resp = "Testing ";
child.stdout.on('data', function(data) {
console.log('Data: ' + data); // This prints "Data: 123" to the console
resp += data; // This does not concat data ("123") to resp
});
callBack(resp) // This only returns "Testing "
}
http.createServer(function(req, res) {
var result = '';
run(function(data) {
result += data;
});
res.writeHead(200, {'Context-Type': 'text/plain'});
res.end(result);
}).listen(PORT, HOST);
sys.puts('HTTP Server listening on ' + HOST + ':' + PORT);
test_data.py
import sys
out = '123';
print out
当我运行:node test_server.js,然后在浏览器中点击它时,我在控制台中获得以下内容:
c:\>node test_server.js
HTTP Server listening on 127.0.0.1:3000
Data: 123
但我在浏览器中只有以下内容:
Testing
有人可以解释一下如何在继续之前等待回调函数返回吗?
感谢。
答案 0 :(得分:1)
您需要将回调挂钩到child_process的close
事件。
child.on('close', function() {
callBack(resp);
}