2014-02-21 2 views
0

Пожалуйста, найдите код, приведенный ниже,Неоднозначность поток выполнения программы node.js

Что я до сих пор не в состоянии понять, в коде, является то, что, почему браузер продолжает ждать 10 секунд перед выполнением следующего запроса. Разве это не просто передать запрос сна в базу данных, а затем перейти к следующей следующей операции?

var http = require('http'); 
var mysql = require('mysql'); 

http.createServer(function (request, response) { 

var connection = mysql.createConnection({ 

    host: 'localhost', 
    user: 'root', 
    password: '', 
    database: 'pops',  
    dateStrings: 'true', 
    multipleStatements: 'true' 
}); 

// Connect to MySQL (if there is an error, report it and terminate the request) 
connection.connect (function (err) { 
    // connected! (unless `err` is set) 

    if (err !== null) 
    { 
     console.log('Error '+err.code); 
    } 
    else 
    { 
     console.log('Connection to database successful!'); 
    } 
}); 

connection.query("SELECT sleep(10);", function(err, rows) { 

     // There was a error or not? 
     if (err !== null) 
     { 
      console.log("Query Rrror:" + err); 
     } 
     else 
     { 
      // Shows the result on console window    
       console.log("called after 10 seconds");    
     } 
}); 

connection.query("SELECT * FROM team", function(error, result) { 

     // There was a error or not? 
     if (error !== null) 
     { 
      console.log("Query Rrror:" + error); 
     } 
     else 
     { 
      // Shows the result on console window 
       response.writeHead(200, {"Content-Type": "text/html"}); 
       length = result.length - 1; 

       for(var i = 0; i <= length; i++) 
       { 
        row_obj = result[i]; 

        team_id = row_obj.id; 
        team_name = row_obj.team_name; 
        team_color = row_obj.color; 
        created_at = row_obj.created_at; 

        response.write('Team ID: ' + team_id + '<br />'); 
        response.write('Team Name: ' + team_name + '<br />'); 
        response.write('Team Color: ' + team_color + '<br />'); 
        response.write('Creation Date: ' + created_at + '<br />'); 
        response.write('<br /><br />'); 
       } 

       response.end("OK"); 
     } 
}); 

// Close connection 
connection.end(); 

}).listen(8080, "127.0.0.1"); 
+0

Да, я не пробовал mysql npm, но не '.connect' и' .query' работает асинхронно? – Passerby

+0

Я думаю, что правильно ответил Педро. Не могли бы вы добавить вывод, который вы видите в консоли? Это покажет, какие шаги выполняются/заканчиваются и в каком порядке. –

ответ

0

Во-первых, вы должны создать соединение mysql вне обработчика httpRequest.

И да, Node.JS будет выполнять оба запроса без ожидания, но то, что я думаю, что происходит, заключается в том, что node-mysql выполняет очередь запросов.

+0

ну, собственно, я чувствую, что операция сна заставляет узел js идти в режиме блокировки, и он просто блокирует anyrequest до 10 секунд. я прав? – Naveed

+0

Это не Node.JS, может быть модуль, который вы используете. –

Смежные вопросы