将承诺置于待定状态

时间:2016-02-05 16:03:54

标签: javascript promise

我想推迟执行Promise,直到提供用户输入。

我想做一个帖子,但要等到发生了什么事,就像这样:

while (true) {
  promiseForUserInput = pending;
  strInput = rl.question("provide input"); //waits for user input
  promiseForUserInput = resolved;
  var resultOfUsersChoice = promiseForUserInput.then(function(input) {
    return loadFromServer(input)
  }).then(function(serverResponse) {
    console.log(serverResponse)
  });
}

有可能吗?我是否需要阅读工厂功能?

1 个答案:

答案 0 :(得分:1)

这必须是这样的:

new Promise(function (resolve) {
    document.getElementById('my-input').addEventListener('keyup', function (e) {
        if (/* input value is good enough for you */) {
            resolve(e.currentTarget.value);
        }
    });
})

要获取输入(我在这里假设浏览器上下文),您必须将事件侦听器绑定到某个输入元素,并在某个已确定的事件上读取该元素的输入。你只需在承诺中完成所有这些,并且只要你对输入值感到满意就resolve承诺。

然后你可以.then这个承诺:

thePromise.then(function (input) {
    alert(input);
});

输入数据将是已解析的值。