2016-02-05 65 views
0

我希望延遲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

在你的代碼中,'rl.question(「提供輸入」)'會阻止執行並等待輸入。你是否想等到從服務器獲得響應,然後再次提示用戶? – thefourtheye

+0

是@thefourtheye,我想再次提示用戶 –

回答

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); 
     } 
    }); 
}) 

要獲得輸入(我在這裏假設瀏覽器上下文),你必須綁定一個事件偵聽器的一些輸入要素和讀取輸入從一些決定事件的元素。你只需在承諾內完成所有的事情,一旦你對輸入值感到滿意,就承諾承諾。

然後,您可以.then這個諾言:

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

輸入數據將是解析值。

+0

謝謝@deceze,我其實只想從rs節點輸入這個節點。但我明白了,我應該有一個包含所有承諾要求的外在承諾,然後我可以對承諾的數組做出決定。希望它有效! –

+0

不知道節點下的工作方式,因爲您需要某種方式的異步輸入方法。 – deceze