2016-06-13 5 views
0

私はひどく立ち往生しています。多くは試してみましたが、価値がありません。
私はmongodbからデータを読み込んでいるnodejsアプリケーションを持っています。
私は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

'serviceHealthConfig'の中に' defer.resolve(obj); 'を入れる必要があります。 '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にもパラメータが必要です。何を見つけるか。

希望すると便利です。

関連する問題