Синхронность в Node JS
Есть такой код
connection.query('SELECT Некий запрос ', function(err, rows, fields) { if (err) throw err; for (var i=0; i < rows.length; i++) { rez = "Записываем значение запроса 1"; connection.query("SELECT Некий запрос генерируется на основе первого 'родителя' ", function(err_photo, rows_photo, fields) { if (err_photo) throw err_photo; for(var k=0; k < rows_photo.length; k++){ rez +='Записываем значение 2 запроса'; console.log('1'); }; }); console.log('2'); }; }); Данный код выполняется асинхронно то есть сперва в консоль идет console.log('1'); а затем console.log('2'); Если вывести rez то мы получим только "Записываем значение запроса 1" Поискал в инете И нашел что подобную проблему решают при помощи var async = require('async') async.series([ function(done) { console.log('Сперва выполнится это') done() }, function(done) { console.log(Затем это) done(new Error('another thing')) } ]); Но вот только как пременить денное решение к моей проблеме? Помогите пожалуйста. А то уже всю голову сломал с этим Ноде ( Или может есть какие то более простые варианты решения данной проблемы ? |
Лично я обычно структурирую код примерно вот так:
File={ create: function(path){var o=Object.create(this); o.path=path; return o}, read: function(){fs.readFile(this.path, "ascii", function(err, data){this.data=data; this.on()}.bind(this))} } file=File.create("tmp") file.on=function(){console.log(this.data)} file.read() // ::: foo То есть, на основе событийной модели, и ООП. Никакая псевдосинхронность тут не нужна, все и так понятно. Если тебе нужна синхронность в асинхронном коде -- значит архитектура твоего приложения -- говно, не надо трахать мозг себе и людям. В асинхронном приложении никакого последователного кода не может быть в принципе, нужна синхронизация событий, а не псевдосинхронность. Это мое ИМХО. |
Часовой пояс GMT +3, время: 09:05. |