运行 一个异步脚本
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,它承诺同步完成它的工作。试一试。
我正在制作 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,它承诺同步完成它的工作。试一试。