使用async是不是要把await的每一个函数都包装成返回promise对象的?

发布于 2022-09-04 06:04:06 字数 823 浏览 31 评论 0

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什么的。。头很大。。
有大神通过这个例子来帮助我理解下吗
非常感激

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生生不灭 2022-09-11 06:04:07

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文