2016-04-12 12 views
-2

私はdbから値を返す別の関数を持っているという点でgetUserId()関数があります。結果は配列arrUserに格納されます。配列は関数には表示されますが、別の関数には表示されません。誰でも私に解決策を与えることができますノードjsのある関数から別の関数に値を返す方法

function getUserId() { 

    var arrUser = new Array(); 

    connection.query('SELECT iUserId,sFromEmailAddress FROM tblFromSenderList',function (err, results, fields) { 
     if (err) { 
      throw err; 
     } 

     if (results.length > 0) { 
      for (var i = 0; i< results.length ;i++){ 
       var reader = results[i]; 
       // console.log(reader['sFromEmailAddress']+" == " + reader['iUserId']); //ADD string - 'ID: 1' 
       arrUser[reader['sFromEmailAddress']] = reader['iUserId']; 
      } 

      console.log(arrUser); // prints value over here 

      return arrUser; 
     } 
    }); 

    console.log(arrUser); // does not print value 
} 
+2

[非同期呼び出しからの応答を返すにはどうすればいいですか?](この場合、どのように応答を返すのですか?) http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – VonD

答えて

-1

これは正常です。データベースへのクエリは非同期です。つまり、クエリが完了する前にこのコードconsole.log(arrUser); // does not print valueを実行していることを意味します。

function getUserId() { 
    getArrayFromDatabase(function(err, result) { 
    console.log(result); 
    }); 
} 


function getArrayFromDatabase(callback) { 
    var arrUser = new Array(); 

    connection.query('SELECT iUserId,sFromEmailAddress FROM tblFromSenderList',function (err, results, fields) { 
    if (err) { 
     return callback(err, null); 
    } 

    if (results.length > 0) { 
     for (var i = 0; i< results.length ;i++){ 
     var reader = results[i]; 
     arrUser[reader['sFromEmailAddress']] = reader['iUserId']; 
     } 

     console.log(arrUser); // prints value over here 

     callback(null,arrUser); 
    } 
}); 
} 
+0

var objUser = new getUserId();オブジェクトobjUserは配列arrUserに内容を含める必要があります – max

関連する問題