Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2015, 17:31
Интересующийся
Отправить личное сообщение для Chrome Посмотреть профиль Найти все сообщения от Chrome
 
Регистрация: 17.01.2013
Сообщений: 21

Синхронность в 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'))
            }
        ]);

Но вот только как пременить денное решение к моей проблеме? Помогите пожалуйста. А то уже всю голову сломал с этим Ноде ( Или может есть какие то более простые варианты решения данной проблемы ?
Ответить с цитированием
  #2 (permalink)  
Старый 09.04.2015, 18:39
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

Лично я обычно структурирую код примерно вот так:
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

То есть, на основе событийной модели, и ООП. Никакая псевдосинхронность тут не нужна, все и так понятно. Если тебе нужна синхронность в асинхронном коде -- значит архитектура твоего приложения -- говно, не надо трахать мозг себе и людям. В асинхронном приложении никакого последователного кода не может быть в принципе, нужна синхронизация событий, а не псевдосинхронность. Это мое ИМХО.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Kак преобразовать кракозябры(Мнемоники) обратно. html, node js vlzkonopatov AJAX и COMET 5 03.12.2014 14:12
Регулярные вырожения node js vlzkonopatov AJAX и COMET 10 30.11.2014 06:10
Проверка файла. Узнать существует он или нет. Node js vlzkonopatov AJAX и COMET 8 28.11.2014 19:28
Проверка фала. Узнать существует он или нет. Node js vlzkonopatov AJAX и COMET 0 28.11.2014 12:05
Node js ошибка в console. Chrome AJAX и COMET 3 21.08.2014 14:23