gpt4 book ai didi

javascript - 在 Node.js 中同步运行函数

转载 作者:行者123 更新时间:2023-11-28 19:13:43 24 4
gpt4 key购买 nike

我想仅在 func1 完成后运行 func2。

{
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 的调用导致该函数等待,这使其成为异步函数。由于您的 prompt 函数不使用回调,因此 async 模块无法知道 prompt 何时完成:相反,它运行 提示并且该函数立即返回。因此,async 之后立即运行 copyProject

要解决这个问题,您需要在prompt中引入一个async“等待”的回调函数。所以基本上是这样的:

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 完成,以防这是一个异步函数,同样,它不需要回调。因此同样的模式也适用于此。

关于javascript - 在 Node.js 中同步运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30295567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com