如何使用Sails.js同步调用Waterline函数。我试过了
var data = Model.findOne({ foo : "bar"});
和
sync(Model, findOne);
sync.fiber(function(){
var data = Model.findOne({ foo : "bar"});
});
他们都不适合我。
这样做的正确方法是什么?
答案 0 :(得分:5)
水线方法是异步的,简单明了。否则就没有命令。您会发现许多访问外部数据源(数据库,HTTP等)的Node方法都是这种情况
如果您需要以更加同步的方式将它们链接起来,可以使用像async这样的包来执行此操作。
答案 1 :(得分:2)
我不确定水线是否可行。我几乎肯定这不是意图。
Model.findOne({ foo : "bar"}, function(err, result){
var data = result;
});
以上会更好....不要打击nodejs的异步性质。它只会在以后受到伤害。
答案 2 :(得分:1)
对不起,这个答案为时已晚,您现在可能已经找到了解决方案,但是对于将来的参考,这里是
你可能需要通过更新/config/globals.js来设置lodash全局并设置_: true
然后你将使用以下
global.sync = require("synchronize");
_.each(sails.models,function(model){
_.map(model,function(attrValue,attrKey){
if(typeof attrValue=="function"){
model[attrKey+"Sync"]=sync(attrValue);
}
});
});
从这里开始,你可以使用任何模型函数的同步版本,在这个函数之后附加“Sync”,如users.findSync({fname:'Mostafa'})