socketio.listen(socketio_port).on('connection',(client)=>{ client.on('connect',(obj)=>{ //do something }); client.on('disconnect',()=>{ //do something }); }); Foo();
比如说有这么一个需求,需要控制流程,等到socketio监听端口,并且完成了两个事件绑定之后,再执行Foo();
如果想要只是用async await来控制的话,是不是要把事件绑定包装成返回promise对象的函数,
function listenOnSocket(){ return new Promise(function (resolve, reject) { client.on('connect',(obj)=>{ //do something }); client.on('disconnect',()=>{ //do something }); resolve(); }); }
但是对于这个例子,是不是要把每一个事件绑定,都进行封装?因为每一个事件绑定都是异步方法。
刚刚开始学习流程控制这里。。很迷茫。。看到很多promise啊generator啊yield什么的。。头很大。。
有大神通过这个例子来帮助我理解下吗
非常感激
只有执行时间达到一定长度的代码片段才需要异步控制(即包装成返回 Promise 的函数)。.on() 事件绑定都会在毫秒级时间内完成,所以不必单独包装。
listenOnSocket 这个片段虽然包含了好几个事件绑定,但执行速度可能也快到无需异步控制(你可以简单测试下)。如果要 100% 确保它在 Foo 之前完成,包装成 return Promise 函数也是值得的。包装好后,把 await listenOnSocket() 和 Foo() 依次写进 async 函数体内,或者简单写成 listenOnSocket().then( function(){ Foo(); }) 都可以达到目的。