javascript - 使用async是不是要把await的每一个函数都包装成返回promise对象的?
怪我咯
怪我咯 2017-04-11 09:55:37
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什么的。。头很大。。
有大神通过这个例子来帮助我理解下吗
非常感激

怪我咯
怪我咯

走同样的路,发现不同的人生

reply all(1)
迷茫

只有执行时间达到一定长度的代码片段才需要异步控制(即包装成返回 Promise 的函数)。.on() 事件绑定都会在毫秒级时间内完成,所以不必单独包装。

listenOnSocket 这个片段虽然包含了好几个事件绑定,但执行速度可能也快到无需异步控制(你可以简单测试下)。如果要 100% 确保它在 Foo 之前完成,包装成 return Promise 函数也是值得的。包装好后,把 await listenOnSocket() 和 Foo() 依次写进 async 函数体内,或者简单写成 listenOnSocket().then( function(){ Foo(); }) 都可以达到目的。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!