Javascript 约曼发电机异步运行最佳实践
我正在创建一个yeoman生成器,它工作正常,现在我需要添加一个列表 从async(我希望它在后台运行)调用,检索数据大约需要2-3秒,因此我将它放在Javascript 约曼发电机异步运行最佳实践,javascript,node.js,async-await,yeoman,yeoman-generator,Javascript,Node.js,Async Await,Yeoman,Yeoman Generator,我正在创建一个yeoman生成器,它工作正常,现在我需要添加一个列表 从async(我希望它在后台运行)调用,检索数据大约需要2-3秒,因此我将它放在初始化中,因为用户将得到这个问题作为第三个问题。(见下文) 因此,当用户遇到问题3时,数据检索过程将开始以避免等待。基本上,我希望数据检索将在后台进行 我的问题是: 它们的异步使用处理是否正常?我的意思是在initialize方法中运行异步 我尝试了以下几点: export default class AppGenerator extends G
初始化
中,因为用户将得到这个问题作为第三个问题。(见下文)
因此,当用户遇到问题3时,数据检索过程将开始以避免等待。基本上,我希望数据检索将在后台进行
我的问题是:
initialize
方法中运行异步
export default class AppGenerator extends Generator {
private listData: ListInstance[];
async initializing() {
this.props = {
appName: "app",
apiName: "app-api",
};
//--------------Here I call to async function --------------//
this.listData = await GetInstances();
}
async prompting() {
const answers = await this.prompt([
{
name: "appName",
message: "Project name: ",
type: "input",
default: this.props.appName,
},
{
name: "apiName",
message: "API name: ",
type: "input",
default: this.props.apiName,
},
{
name: "instanceName",
type: "list",
message: "Choose instance",
choices: this.listData,
},
];
}
writing() {
//here I dont get the `this.answers` , I need to get the values from the answers
}
首先是一些观察:
- Yeoman使用Inquirer.js
- Inquirer.js具有反应式提示
- 最后,我还没有测试这段代码。请原谅或指出错误
this
,用于示例中使用的类)
。。。
异步提示(){
var prompts=new Rx.Subject();
此.prompt(提示);
下一步({
名称:“appName”,
消息:“项目名称:”,
键入:“输入”,
默认值:this.props.appName,
});
下一步({
名称:“apiName”,
消息:“API名称:”,
键入:“输入”,
默认值:this.props.apiName,
});
this.listData=等待GetInstances();
下一步({
名称:“instanceName”,
键入:“列表”,
消息:“选择实例”,
选项:this.listData,
});
提示。完成();
this.answers=this.prompt(prompts).ui.process.subscribe(onEachAnswer、onError、onComplete);
}
...
其他注意事项:当启动提示
部分时,使用wait
将启动对GetInstances
的调用。但是,在返回GetInstances
之前,它不允许询问最后一个问题
您能否提供更多详细信息…如HTML和正在触发的事件。。我有点困惑问题在哪里。。。应用程序流程。。。事情是如何运作的,这个提示功能在做什么?我对您共享的代码片段不太理解。@HimanshuBansal-假设您正在创建和创建生成器,其中一个问题应该返回rest调用的数据列表(可能需要1-3秒),你想在后台运行这个过程,当用户遇到这个问题时,他不需要等待3秒钟来获取数据,你会怎么做?我得到了,但是。。您是否正在通过服务或其他方式发出任何http请求..如果是在初始化时。。。。它会像你说的那样回答接下来的3个问题吗?它需要在后台运行。。所以我无法理解流程。如果你能澄清的话。。我很乐意以更好的方式帮助您…@HimanshuBansal-该服务正在调用本地API(它不是公共的)
让我们假设您正在调用一个函数来调用某个rest,该函数大约需要3秒(或更长时间,网络…),数据应该在初始化时获取,因为我们不想浪费时间,但问题3应该准备好了
instanceName`你会怎么做?工作线程?instanceName
需要访问此data@HimanshuBansal-现在清楚了吗?