2017-05-07 6 views
0

私はNodeJSを初めて使っています。私はコードとして学習していますが、私はPromise /の周りを頭で囲むことができません。Return from then - nodejs

ここにコードがあります。私はライブラリ関数を使用してデータベース値を読み取っています。

var collection = 'Students'; 
var query = {}; 
query.name = 'name'; 

    //readFromDatabse returns -{Function} a promise to return the document found, or null if not found 
var temp = readFromDatabase(collection, query).then(function(studentData) { 
    var result = { 
     resultDetails: { 
      username: studentData.username, 
      password: studentData.password 
     } 
    }; 
    return callback(null,resultDetails); 

}); 

が、私は一時の値を参照して読んだとき、それは{"isFulfilled":false,"isRejected":false}が含まれています!どのようにして結果の詳細を一時的に得ることができますか?

+0

ない問題が、 'リターンコールバック(NULL、resultDetails); resultDetails'が定義されていない'ので '文句を言わない、あなたが期待する何をすべきか - また、あなたは約束でコールバックを使用しているという事実は、他の示唆潜在的な問題 - 私は潜在的に、コードはちょうど良いかもしれないと言って、それは通常、コールバックパラダイムの代わりに約束が使用されている –

答えて

0

プロミスを値のコンテナと考える必要があります。 readFromDatabaseはそのようなコンテナを返します。クエリが失敗しない限り、最終的に要求された値を保持する可能性があります。 temp変数はコンテナを指し示しますが、応答は指しません。プロパティisFullfilledisRejectedは、プロミスの属性であり、値で解決されていないか、エラーで拒否されていないことを示しています。

回答を得るにはthenメソッドを使用する必要があります。クエリに結果やエラーが発生したときにそこに登録する関数が呼び出されます。

var collection = 'Students'; 
var query = {}; 
query.name = 'name'; 

var temp = null; 
readFromDatabase(collection, query).then(function(studentData) { 
    var result = { 
     resultDetails: { 
      username: studentData.username, 
      password: studentData.password 
     } 
    }; 
    temp = result; 
}); 

// temp is still null here 
+0

ありがとう、私は少し読む!私は連鎖して試してみましょう。 – xKir