运行 在 node.js 中同步运行
Running functions in sync in node.js
我想 运行 func2 运行 只有在 func1 完成后。
{
func1();
func2();//
}
但是当 func1() 启动时,func2() 不会等待 func1() 完成。 func2() 运行 与 func1() 同时执行,这会导致 运行 时间错误,因为 func2() 需要来自 func1() 的一些输入。
我也尝试过使用异步模块,但没有成功。
编辑:我运行 函数check(),它调用了两个函数prompt() 和copyProject()。 copyProject() 应该 运行 仅在 prompt() 函数完成后,但它同时开始执行。
var check = function check (){
async.series([
function(callback){
prompt();
callback(null);
},
function(callback){
copyProject();
callback(null);
}
]);
};
var prompt = function prompt(){
var prompts = [{
name: "projectName",
message: "What is the name of your project?"
},{
name: "authorName",
message: "What is your name?",
}];
inquirer.prompt(prompts, function( answers ) {
for (var key in answers) {
if (answers.hasOwnProperty(key)) {
console.log(key + " -> " + answers[key]);
infoToRender[key] = answers[key]
}
}
});
};
var copyProject = function copyProject (){
// code to copy some files from one location to another based on input from prompt function
};
您的函数 prompt
本身就是一个异步函数:对 inquirer.prompts
的调用会导致函数 wait,这使其成为异步函数。由于您的 prompt
函数不使用回调,因此 async
模块无法知道 prompt
何时完成:相比之下,它 运行s prompt
和这个立即运行 returns。因此 async
之后 运行s copyProject
.
你需要做的是在prompt
中引入一个async
"waits"的回调函数来解决这个问题。所以基本上是这样的:
var prompt = function (callback) {
// Do your stuff here...
inquirer.prompt(prompts, function (answers) {
// Your for loop here...
callback(null);
});
};
然后,在 async
内你需要做:
async.series([
function (callback) {
prompt(callback);
},
function (callback) {
copyProject();
callback(null);
}
]);
那么copyProject
只有在prompt
完成后才运行。请注意 async.series
不会 不会 等待 copyProject
完成,以防这是一个异步函数,同样,它不接受回调。所以同样的模式适用于这里。
我想 运行 func2 运行 只有在 func1 完成后。
{
func1();
func2();//
}
但是当 func1() 启动时,func2() 不会等待 func1() 完成。 func2() 运行 与 func1() 同时执行,这会导致 运行 时间错误,因为 func2() 需要来自 func1() 的一些输入。 我也尝试过使用异步模块,但没有成功。
编辑:我运行 函数check(),它调用了两个函数prompt() 和copyProject()。 copyProject() 应该 运行 仅在 prompt() 函数完成后,但它同时开始执行。
var check = function check (){
async.series([
function(callback){
prompt();
callback(null);
},
function(callback){
copyProject();
callback(null);
}
]);
};
var prompt = function prompt(){
var prompts = [{
name: "projectName",
message: "What is the name of your project?"
},{
name: "authorName",
message: "What is your name?",
}];
inquirer.prompt(prompts, function( answers ) {
for (var key in answers) {
if (answers.hasOwnProperty(key)) {
console.log(key + " -> " + answers[key]);
infoToRender[key] = answers[key]
}
}
});
};
var copyProject = function copyProject (){
// code to copy some files from one location to another based on input from prompt function
};
您的函数 prompt
本身就是一个异步函数:对 inquirer.prompts
的调用会导致函数 wait,这使其成为异步函数。由于您的 prompt
函数不使用回调,因此 async
模块无法知道 prompt
何时完成:相比之下,它 运行s prompt
和这个立即运行 returns。因此 async
之后 运行s copyProject
.
你需要做的是在prompt
中引入一个async
"waits"的回调函数来解决这个问题。所以基本上是这样的:
var prompt = function (callback) {
// Do your stuff here...
inquirer.prompt(prompts, function (answers) {
// Your for loop here...
callback(null);
});
};
然后,在 async
内你需要做:
async.series([
function (callback) {
prompt(callback);
},
function (callback) {
copyProject();
callback(null);
}
]);
那么copyProject
只有在prompt
完成后才运行。请注意 async.series
不会 不会 等待 copyProject
完成,以防这是一个异步函数,同样,它不接受回调。所以同样的模式适用于这里。