0

node.jsに問題があります。プログラムのコマンドはクロノロジカルにロードされず、その方法がわかりません。データベースからいくつかの画像とテキストをダウンロードして、8個のパックで送信しようとしています。しかし、node.jsはforループとコマンドアフターループを同時に実行します。

これが私のコードです:

socket.on('background_dinamically', function(data){
        connection.query("SELECT * FROM products WHERE id='"+data.cathegory+"'" , function(err, rows, fields){
            var count = 0;
            var array_elements = [];
            if(err){
                socket.emit('errorserver');
            }else{
                for (var i = rows.length - 1, count; i >= 0; i-- & count ++) {
                    array_elements.push(rows[i]);
                    if (count == 8) {
                        socket.emit('image_loading_background', [array_elements, data]);
                        count = 0;
                        array_elements = [];
                    }
                };

                if(count > 0 && count < 8 && count != 0) { 
                    socket.emit('image_loading_background', [array_elements, data]);
                }
            }
        });
    }); 
4

2 に答える 2

0

非同期(時系列ではない)プログラミングの世界へようこそ。ご覧のとおり、デフォルトでは、ノードはI/O操作を並行して実行します。時系列(シリアル)、並列バッチ、およびエラー処理ヘルパーを含む他の動作を取得するには、使用可能な多くのフロー制御ライブラリの1つを参照してください。具体的には、caolan/asyncをお勧めします。

于 2013-01-23T19:31:05.763 に答える
0

マーク、最初にクライアント側で同期を実行できるかどうかを確認します。クライアントにデータを送信する前にnodejsアプリを強制的に同期させると、スケーラビリティが低下します。

サーバー側で同期せずに実行できない場合は、スパゲッティコードまたは同期ライブラリのいずれかを選択できます。

于 2013-01-23T20:00:55.440 に答える