运行 一个异步脚本

Running a script asynchronous

我正在制作 Yeoman generator 来安装 CraftCMS,其中预装了一些自定义设置和文件以加快开发速度。

我知道脚本执行 composer create-project craftcms/craft 的要点。对我来说,下一个合乎逻辑的步骤是 cd 进入文件夹和 运行 工艺安装程序 craft install

我只是不知道如何让代码行 运行 同步。目前它正在 运行 同时处理所有内容,这当然会 运行 出错。

这是我的代码:

'use strict';
const generator = require('yeoman-generator');
const chalk = require('chalk');
const yosay = require('yosay');
let init;
module.exports = class extends generator {
    async initializing() {
        this.log(yosay(chalk.blue('Hey!') + '\n' + 'Welcome to the Visited Installer!' + '\n\n' + 'Let\'s start a project together!'));
        init = await this.prompt([{
            type: 'input',
            name: 'name',
            message: 'What is the name of your new project?',
        }]);
        this.log(yosay(chalk.blue(init.name) + ', Great!' + '\n\n' + 'Let\'s start by downloading the latest version of CraftCMS.'));
    }
    install() {
        this.spawnCommand('composer', ['create-project', 'craftcms/craft', init.name]);
        this.log(yosay(chalk.blue('Done!') + '\n\n' + 'The next step is installing CraftCMS, Don\'t worry, I\'ve got this!'));
        this.spawnCommand('cd', [init.name]);
        this.spawnCommand('craft', ['install']);
    }
};

我曾尝试阅读有关 JS 中的异步和同步编程的内容,但由于我的母语不是英语,而且我对 JS 的了解不多(我主要使用 PHP) 让我很难理解它背后的逻辑。

更新:我更改了 post,我在脑海中混淆了异步和同步。问题仍然是我的 install() 函数 运行 中的所有内容同时存在:this.log 不等待 this.spawnCommand 完成下载和设置文件..

问题是 spawnCommand 本质上是异步的,它不会为您提供任何等待命令完成的方法。它不接受回调参数,也不 return 承诺。

然而还有另一个命令:spawnCommandSync,它承诺同步完成它的工作。试一试。