完全阻止像Meteor._wrapAsync这样的nodejs中的异步调用

时间:2014-09-30 21:40:26

标签: node.js meteor npm

我在Meteor(nodejs框架)中有以下代码

dbAllSync = Meteor._wrapAsync(db.all.bind(db))
rows = dbAllSync(query)

使用上面的代码,我能够完全阻止db调用,即代码执行只会在获取查询结果后继续执行。

如何在不使用Meteor._wrapAsync的情况下在nodejs中实现相同的完整块代码执行?

P.S。 - 我尝试过“同步”和“同步”节点包。它没有服务于我的目的。它们没有完整的代码块执行,但是没有阻塞代码执行。

另外,我知道full-block违反了nodejs原则。但是我有一些要求要实现,因此我希望nodejs在代码中的某些点处是完全阻塞的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在幕后,Meteor.wrapAsyncfibers/future库的包装。

https://github.com/laverdet/node-fibers

光纤机制并没有完全阻止节点事件循环,整个过程以非阻塞异步方式执行内容,它只是与开发人员同步。

这与fs函数(如writeSync非常不同,这些函数真正阻止了该过程。

编辑:添加一些样板代码:

var Future=require("fibers/future");

var future=new Future();
api.someAsyncFunc(params,future.resolver());
future.wait();

您可以深入了解node-fibers npm模块的文档,以找到有关Future.wrap等精美包装功能的更多信息。

https://github.com/laverdet/node-fibers#futures