2014-04-01 87 views
2

如何使用Sails.js同步呼叫水線功能。我試圖航行水線同步呼叫

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

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

他們都不是爲我工作。

什麼是正確的方法來做到這一點?

回答

5

水線方法是異步的,簡單和簡單的。否則命令不會使他們成爲他們。您會發現許多用於訪問外部數據源(數據庫,HTTP等)的節點方法都是這種情況。

如果您需要以更同步的方式鏈接它們,可以使用如async這樣做。

1

我不確定這是可能的水線。我幾乎可以肯定這不是這個意圖。

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

以上會更好....不要打擊nodejs的異步性質。它只會在晚些時候受傷。

+0

功能後,通過將「同步」使用任何模型函數的同步版本但爲什麼?有什麼好處嗎? – Daveman

1

對不起,這個答案是太晚了,你可能已經通過,現在找到了解決辦法,但以備將來參考,這裏是 你可能需要做lodash全球通過更新/config/globals.js和集_: true 那麼你會用下列

global.sync = require("synchronize"); 
_.each(sails.models,function(model){ 
    _.map(model,function(attrValue,attrKey){ 
     if(typeof attrValue=="function"){ 
      model[attrKey+"Sync"]=sync(attrValue); 
     } 
    }); 
}); 

從這裏編輯/config/bootstrap.js上,你可以這樣users.findSync({fname:'Mostafa'})

+0

您的解決方案看起來不錯。但是我們也需要添加exec函數。 .exec(function(err,found)。如何同步? 如果我使用你的方法和findSync,返回的對象總是屬性值爲空。 – ameilland