2017-08-17 10 views
1

私はMySQLのクエリからデータを取得して、要素を配列にプッシュしています。ただし、クエリから移動すると、配列は空になります。私はそれが配列の要素は参照のみであるためだと思います。しかし、どのように配列内に要素を保持するのですか?配列内の要素をプッシュした後、空です

var timeblocked = []; 
 
var timeunblocked = []; 
 
connection.query("SELECT user_relationships.*, block_intervals.* FROM user_relationships INNER JOIN block_intervals ON user_relationships.id = block_intervals.relationfk WHERE (user1 = '"+currentUserID+"' AND user2 = '"+user2_in_blockedRelationship+"' AND timeunblocked IS NOT NULL)", function(error, resultsForBlock){ 
 
    for (var i = 0; i<resultsForBlock.length; i++) { 
 
    timeblocked.push(resultsForBlock[i].timeblocked); 
 
\t timeunblocked.push(resultsForBlock[i].timeunblocked); 
 
    } 
 
console.log("1. timeblocked: ", timeblocked, "timeunblocked: ", timeunblocked); // shows all of the elements in the array 
 
}); 
 
console.log("2. timeblocked: ", timeblocked, "timeunblocked: ", timeunblocked); //This shows an empty array

なぜ二console.log()ませは、配列を記録していますか?

+0

あなたが望む結果を得るには、async関数を使用します。コールバックを使用するか、約束してください。 – sabbir

+0

'connection.query'は非同期関数 –

+0

です。私はこれでかなり新しいです。どのようにクエリを違うと思いますか? – suonpera

答えて

1

これは非同期動作です。コールバックの実行を完了した後で、それらを実行するのを待つ必要があります。

dbの呼び出しが完了する前に、2番目のコンソールログが実行されます。

最良の方法は、SQLコールを実行した後にのみ配列を使用することです。

connection.query("SELECT user_relationships.*, block_intervals.* FROM user_relationships INNER JOIN block_intervals ON user_relationships.id = block_intervals.relationfk WHERE (user1 = '"+currentUserID+"' AND user2 = '"+user2_in_blockedRelationship+"' AND timeunblocked IS NOT NULL)", function(error, resultsForBlock){ 
    for (var i = 0; i<resultsForBlock.length; i++) { 
    timeblocked.push(resultsForBlock[i].timeblocked); 
     timeunblocked.push(resultsForBlock[i].timeunblocked); 
    } 
console.log("1. timeblocked: ", timeblocked, "timeunblocked: ", timeunblocked); // shows all of the elements in the array 



// TODO -- remaining all code that uses the array. 

}); 

わからない場合は、promisesを使用するとよいでしょう。

+0

私はこれをやろうと考えましたが、残りのコードが複雑になるため、これを動作させることができればもっと簡単になり、クエリ内にコードを追加することはできません。 – suonpera

+0

@jonasPW約束はあなたの友人です:) –

+0

@SURESHどのように約束して質問しますか? – suonpera

関連する問題