我想推迟执行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)
});
}
有可能吗?我是否需要阅读工厂功能?
答案 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);
});
输入数据将是已解析的值。