【问题标题】:Sails Waterline Sync callingSails Waterline 同步呼叫
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 但是为什么呢?有什么好处吗?
      【解决方案3】:

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

      【讨论】:

      • 您的解决方案似乎不错。但是我们还需要添加 exec 函数。 .exec(function (err, found) . 如何同步?如果我使用你的方法和 findSync,返回的对象的属性值总是空的。
      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多