如何使用 Sails.js 同步调用 Waterline 函数。我试过了
var data = Model.findOne({ foo : "bar"});
和
sync(Model, findOne);
sync.fiber(function(){
var data = Model.findOne({ foo : "bar"});
});
他们都没有为我工作。
这样做的正确方法是什么?
Waterline 方法是异步的、简单明了的。否则,没有任何命令会使它们成为现实。您会发现许多访问外部数据源(数据库、HTTP 等)的 Node 方法都是如此。
如果您需要以更同步的方式链接它们,您可以使用async之类的包来执行此操作。
我不确定这对水线是否可行。我几乎可以肯定这不是故意的。
Model.findOne({ foo : "bar"}, function(err, result){
var data = result;
});
以上会更好....不要与nodejs的异步性质作斗争。以后只会痛。
很抱歉这个答案太晚了,你现在可能已经找到了一个解决方案,但是为了将来的参考,你可能需要通过更新 /config/globals.js 来使 lodash 全局化,_: true
然后你将编辑/config/bootstrap.js 具有以下内容
global.sync = require("synchronize");
_.each(sails.models,function(model){
_.map(model,function(attrValue,attrKey){
if(typeof attrValue=="function"){
model[attrKey+"Sync"]=sync(attrValue);
}
});
});
从这里开始,您可以通过在这样的函数后面附加“同步”来使用任何模型函数的同步版本users.findSync({fname:'Mostafa'})