考虑这段代码:
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 的答案中描述的那样。
我正在寻找一种设计此代码的规范方法,其中:
- 不需要外部范围内的任何变量
- 不会依赖 3rd 方承诺库(应该基于 ES6 承诺)
有没有办法做到这一点?或者重构我的代码以使其更容易会更好吗?