Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 如何在执行过程中使用rxjs动态地向Inquirer JS添加问题?_Javascript_Rxjs_Inquirer_Inquirerjs - Fatal编程技术网

Javascript 如何在执行过程中使用rxjs动态地向Inquirer JS添加问题?

Javascript 如何在执行过程中使用rxjs动态地向Inquirer JS添加问题?,javascript,rxjs,inquirer,inquirerjs,Javascript,Rxjs,Inquirer,Inquirerjs,我想向用户提问,但不想让所有问题立即排好队 文档中提到了rxjs,但我觉得文档中在如何在执行提示时正确添加问题方面存在差距,或者至少它对我不太起作用 在内部,Inquirer使用JS反应式扩展来处理事件 和异步流 这意味着您可以利用此功能提供更多信息 高级流。例如,您可以动态地将问题添加到 问: 使用返回值进程属性,可以访问更精细的 粒度回调: 所以多亏了我的灵感,我制作了我需要的代码。jana提供的示例和提示有点过时,因为某些原因,使用rxjs中的主题不再有效,至少对我来说不起作用。但是,通

我想向用户提问,但不想让所有问题立即排好队

文档中提到了rxjs,但我觉得文档中在如何在执行提示时正确添加问题方面存在差距,或者至少它对我不太起作用

在内部,Inquirer使用JS反应式扩展来处理事件 和异步流

这意味着您可以利用此功能提供更多信息 高级流。例如,您可以动态地将问题添加到 问:

使用返回值进程属性,可以访问更精细的 粒度回调:


所以多亏了我的灵感,我制作了我需要的代码。jana提供的示例和提示有点过时,因为某些原因,使用rxjs中的主题不再有效,至少对我来说不起作用。但是,通过将发射器存储在观察者创建回调之外,可以很容易地解决这个问题。记住将rxjs作为依赖项添加到项目中(与InquirerJS当前使用的相同)

这个提示和博客文章应该是您开始使用时所需要的。请记住,如果您愿意,您可以一次性将多个问题排队


完成后,放入
emitter.complete()
结束提示的地方。

在较新版本中,相同问题的新提示(
名称
)需要
askAnswered:true
var prompts = new Rx.Subject();
inquirer.prompt(prompts);

// At some point in the future, push new questions
prompts.next({
  /* question... */
});
prompts.next({
  /* question... */
});

// When you're done
prompts.complete();
inquirer.prompt(prompts).ui.process.subscribe(onEachAnswer, onError, onComplete);
const inquirer = require("inquirer");
var { Observable } = require("rxjs");

let emitter;

var prompts = Observable.create(function(e) {
  emitter = e;
  // need to start with at least one question here
  emitter.next({
    type: "list",
    name: "fruits",
    message: "What is your favorite fruit?",
    choices: [
      {
        name: "Banana"
      },
      {
        name: "Apple"
      },
      {
        name: "Pear"
      }
    ]
  });
});

let times = 0;

inquirer.prompt(prompts).ui.process.subscribe(
  q => {
    let dots = new Array(times).fill(".").join("");

    if (q.answer.toLowerCase() === "pear") {
      console.log("That's Great. I would never forget a Pear-eater.");
      emitter.complete();
    }

    emitter.next({
      type: "list",
      name: "fruits",
      message:
        "Sorry, what is your favorite fruit? I forgot, was it " +
        q.answer +
        ", or something else?",
      choices: [
        {
          name: "Uh, Banana.." + dots,
          value: "banana"
        },
        {
          name: "Uh, Apple.." + dots,
          value: "apple"
        },
        {
          name: "Pear!",
          value: "pear"
        }
      ]
    });

    times++;
  },
  error => {
    console.log("Hm, an error happened. Why?");
  },
  complete => {
    console.log("I think we are done now.");
  }
);