运行 在 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 完成,以防这是一个异步函数,同样,它不接受回调。所以同样的模式适用于这里。