次のコードを検討してください。
function openSocket() { /* returns a promise for a socket */ }
function sendMessage1(socket) { /* sends 1st message, returns a promise for a response */ }
function sendMessage2(socket) { /* sends 2nd message, returns a promise for a response */ }
function cleanup(socket) { /* closes the socket */ }
function updateUI() {}
function showError(error) {}
openSocket()
.then(sendMessage1)
.then(sendMessage2)
.then(cleanup)
.then(updateUI)
.catch(showError);
sendMessage*()
どちらの関数もソケットをパラメーターとして受け入れることに注意してください。ただし、最初のものだけが から解決された値を取得するため、これを取得するのは最初のものだけopenSocket()
です。
外部スコープで変数を使用することで、これを回避できます。つまり、ソケットが解決されたらソケットを割り当て、それを で使用できますsendMessage2()
が、少しハックで汚いようです。
また、 Q に関するこの回答で説明されているように、いくつかのライブラリサポートを使用できることも知っています。
このコードを設計する標準的な方法を探しています。
- 外側のスコープに変数は必要ありません
- サードパーティの promise ライブラリに依存しない (ES6 の promise に基づく必要があります)
それを達成する方法はありますか?それとも、コードをリファクタリングして簡単にする方がよいのでしょうか?