【发布时间】:2014-05-12 20:25:23
【问题描述】:
如何使用 Sails.js 同步调用 Waterline 函数。我试过了
var data = Model.findOne({ foo : "bar"});
和
sync(Model, findOne);
sync.fiber(function(){
var data = Model.findOne({ foo : "bar"});
});
它们都不适合我。
这样做的正确方法是什么?
【问题讨论】:
如何使用 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 并设置 _: true 来使 lodash 全局化
然后您将使用以下内容编辑 /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'})
【讨论】: