Рассмотрим этот код:
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.
Я ищу канонический способ разработки этого кода, который:
- не требует никаких переменных во внешней области
- не будет полагаться на сторонние библиотеки промисов (должны быть основаны на промисах ES6)
Есть ли способ сделать это? Или было бы лучше реорганизовать мой код, чтобы упростить его?