2016-06-13 153 views
0

我有一種情況,我很困難。嘗試了很多,但沒有價值。
我有一個nodejs應用程序,我正在從mongodb讀取數據。
我有一個主要的方法,從那裏我打電話fetchMongo()方法和所有其他功能。我需要fetchMongo函數將結果返回給Main。主要方法有一個對象obj將被傳遞給所有的函數。
我試過下面的代碼:它不工作。
console.log裏面的fetchMongo()工作正常,但fetchMongo()不返回到Main的值。
請幫忙。如何將mongoose findOne方法的值返回給調用函數

function fetchMongo(obj) 
{ 
    var defer = Q.defer(); 
    serviceHealthConfig.findOne({}, '', { sort: {'_id' : -1} }, function(err, nodes){ 
     var struct={} 
     if(err) 
      console.log(err); 
     //console.log(nodes); 
     obj = nodes; 
     return obj; 
    }); 
    defer.resolve(obj); 
    return defer.promise; 
} 

function main(){ 
    var obj = { }; 
    var nodesObject = fetchMongo(obj) 
        .then(methOne(obj)) 
        .then(methTwo(obj)) 
        .then(methThree(obj)) 
} 
+0

您需要將'defer.resolve(obj);''serviceHealthConfig'內部。當你到達'defer.resolve()'時,'serviceHealthConfig'可能仍然在尋找Mongo上的記錄。 –

+0

此外,我認爲findOne需要一個參數..什麼發現.... – rout0802

回答

0

您的defer.resolve應該在find one回調中被調用。如下所示:

function fetchMongo(obj) 
{ 
    var defer = Q.defer(); 
    serviceHealthConfig.findOne({}, '', { sort: {'_id' : -1} }, function(err, nodes){ 
     var struct={} 
     if(err) 
      console.log(err); 
     //console.log(nodes); 
     obj = nodes; 
     defer.resolve(obj); 
    }); 
    return defer.promise; 
} 

此外,findOne也需要一個參數;要找什麼。

希望這會有所幫助!

相關問題