异步查询与文件之间传递数据的问题
发布于 11 年前 作者 erichlw 3798 次浏览 最后一次编辑是 8 年前

文件A.JS 有一个方法 A.business(); 文件B.JS 有一个方法 B.findById(id);

在A 中调用了 B.findById() 来查询数据。

因为是异步的,所以在 A 中:

channel.on(‘success’, function() { // 查询到数据了,操作… });

这是A 中的,没问题,但是在B中就有冲突了。

在B中 查询到数据后,有两个操作: 1、返回数据 2、触发事件

现在问题来了,在B中应该怎么处理这两个操作呢? 1、返回数据 这样直接return了,后面就没了,事件也没法触发了 2、触发事件 这样A中的事件处理就开始运行了,而真正的结果可能还没有返回过去

请问这样的情况,应该怎么处理比较好。

7 回复

没明白…… 按我的理解你是希望数据返回再触发事件。

还是上具体一点的代码吧。

@ggaaooppeenngg

是的。 是返回数据和触发事件这里有冲突,昨天回去的路上我突然想到,这样的问题人家写API的时候不可能没有想到的,一定有解决的办法,然后我查了下,发现这个函数在触发事件的时候还可以传参。 不过多谢你回答我的问题了。 昨天下午搞这个的时候思维被缠在里面了,直到回家的路上才跳出来,就想明白了。

emitter.emit(event, [arg1], [arg2], […]) 用这个,问题已经解决了。

@ErichLW 其实我一直很好奇,别人是如何避免这样的情况,写成异步的方式的。

@ggaaooppeenngg

嗯,写成异步的。如果用同步的话,JS的这一大特性就没了。而用异步,在触发事件的时候能够很好的处理需要传输的数据,那就没有问题了。

避免的话,真没这个必要,JS的核心就是异步编程与事件循环机制,如果硬生生要写成同步的,我们知道NODEJS是单线程的,而如果还要写成同步的,说实话,这种效率。。。

Don’t use return , you can use async control .


签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3

回到顶部