2

如何使用 Sails.js 同步调用 Waterline 函数。我试过了

var data = Model.findOne({ foo : "bar"});

sync(Model, findOne);
sync.fiber(function(){
    var data = Model.findOne({ foo : "bar"});
});

他们都没有为我工作。

这样做的正确方法是什么?

4

3 回答 3

5

Waterline 方法是异步的、简单明了的。否则,没有任何命令会使它们成为现实。您会发现许多访问外部数据源(数据库、HTTP 等)的 Node 方法都是如此。

如果您需要以更同步的方式链接它们,您可以使用async之类的包来执行此操作。

于 2014-04-01T21:01:03.087 回答
2

我不确定这对水线是否可行。我几乎可以肯定这不是故意的。

Model.findOne({ foo : "bar"}, function(err, result){
  var data = result;
});

以上会更好....不要与nodejs的异步性质作斗争。以后只会痛。

于 2014-04-01T21:07:49.070 回答
1

很抱歉这个答案太晚了,你现在可能已经找到了一个解决方案,但是为了将来的参考,你可能需要通过更新 /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'})

于 2014-12-08T11:10:54.553 回答