我试图在javascript node.js上依次运行两个函数 这是两个功能
此函数运行bat文件
function loadTime() {
var exec = require('child_process').exec;
exec('C:\\Temp\\tasks\\acis\\runme.bat', function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
if (error !== null) {
console.log('exec error: ' + error);
}
});
}
我必须等待这个bat文件的结果才能运行下一个函数,即
function parseTime() {
var parser = new xml2js.Parser();
fs.readFile('C:\\Temp\\tasks\\acis\\2.sat\\2.sat.response.xml', function(err, data) {
parser.parseString(data, function(err, result) {
var timeString = result.Message.Response[0].Events[0].MessageReportEvent[8].$.Message;
var fileTime = timeString.substr(13, 20);
console.log(fileTime);
});
});
}
但是在javascript中我将其作为
运行loadTime();
parseTime();
似乎parseTime()
函数在loadTime()
完成运行之前开始运行。 parseTime()
完成后如何运行loadTime()
?
答案 0 :(得分:1)
你可以在loadTime()中调用parseTime()方法,这样一旦loadTime()完成,那么只调用parseTime()。否则,您可以使用nodejs的 async 模块来完成此任务。
答案 1 :(得分:1)
function loadTime(done){
var exec = require('child_process').exec;
exec('C:\\Temp\\tasks\\acis\\runme.bat', function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
if (error !== null) {
console.log('exec error: ' + error);
}
done();
});
function parseTime() {
var parser = new xml2js.Parser();
fs.readFile('C:\\Temp\\tasks\\acis\\2.sat\\2.sat.response.xml', function(err, data) {
parser.parseString(data, function(err, result) {
var timeString = result.Message.Response[0].Events[0].MessageReportEvent[8].$.Message;
var fileTime = timeString.substr(13, 20);
console.log(fileTime);
});
});
};
loadTime(
function() {
parseTime();
}
);
答案 2 :(得分:1)
您可以简单地为loadTime()
提供一个在完成加载后执行的回调函数,并将此回调函数设为您的parseTime()
这样的事可能有用(我还没有测试过)
function loadTime(callback){
var exec = require('child_process').exec;
exec('C:\\Temp\\tasks\\acis\\runme.bat', function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
if (error !== null) {
console.log('exec error: ' + error);
}else{
// Assuming you want parseTime() to fire if there were no errors in loadTime()
// When we reach this point, we want to fire our callback function
callback();
}
}
);
function parseTime(){
var parser = new xml2js.Parser();
fs.readFile('C:\\Temp\\tasks\\acis\\2.sat\\2.sat.response.xml', function(err, data) {
parser.parseString(data, function (err, result) {
var timeString = result.Message.Response[0].Events[0].MessageReportEvent[8].$.Message;
var fileTime = timeString.substr(13,20);
console.log(fileTime);
});
});
};
// We call loadTime() with parseTime() as its callback
loadTime(function(){
parseTime();
});
答案 3 :(得分:1)
您可以将功能设置为接受如下回调:
$(function () {
var $list;
var $newItemForm;
var $newItemButton;
var item = '';
$list = $('ul');
$newItemForm = $('#newItemForm');
$newItemButton = $('#newItemButton');
// ADDING A NEW LIST ITEM
$newItemForm.on('submit', function (e) {
e.preventDefault();
var text = $('input:text').val();
$list.append('<li>' + text + '</li>');
$('input:text').val('');
});
$list.on('click', 'li', function () {
var $this = $(this);
var complete = $this.hasClass('complete');
if (complete === true) {
$this.animate({}, 500, 'swing', function () {
$this.remove();
});
} else {
item = $this.text();
$this.remove();
}
});
});
localStorage.setItem($list);
//add animations when you learn how to...
应输出到控制台:首先!第二!
您很可能希望能够选择回拨,以便在未通过时不会出现错误:
function first(callback) {
console.log("First!");
callback();
}
function second() {
console.log("Second!");
}
first(second);