Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 约曼发电机异步运行最佳实践_Javascript_Node.js_Async Await_Yeoman_Yeoman Generator - Fatal编程技术网

Javascript 约曼发电机异步运行最佳实践

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

我正在创建一个yeoman生成器,它工作正常,现在我需要添加一个列表 从async(我希望它在后台运行)调用,检索数据大约需要2-3秒,因此我将它放在
初始化
中,因为用户将得到这个问题作为第三个问题。(见下文) 因此,当用户遇到问题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-现在清楚了吗?