Поиск:

Ответ в темуСоздание новой темы Создание опроса
> асинхронное выполнение функций 
:(
    Опции темы
g27
Дата 27.1.2013, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 29.9.2007
Где: Vilnius

Репутация: нет
Всего: нет



Здравствуйте, я тут увлёкся node.js на выходных. Решил посмотреть что это такое. Немного застрял на одном моменте. Не понимаю как добавить callback функцию в first, что бы node.js не ждал её.

Код

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

var routes = {}
routes["/"] = first;
routes["/first"] = first;
routes["/second"] = second;

function first(response) {
    function sleep(milliSeconds) {
        var startTime = new Date().getTime();
        while (new Date().getTime() < startTime + milliSeconds);
    }
    console.log('First starts'+new Date().getTime());
    sleep(20000);
    console.log('First finished'+new Date().getTime());
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write('first route');
    response.end();
}

function second(response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write('second route');
    response.end();
}


var server = http.createServer(function(request, response) {

    var pathname = url.parse(request.url).pathname;

    if (typeof routes[pathname] === 'function') {
        routes[pathname](response);
    } else {
        response.writeHead(404, {"Content-Type": "text/plain"});
        response.write("404 Not found");
        response.end();
    }
});

server.listen(8000);


Покажите пожалуйста как мне сделать first функцию не блокирующей.
PM MAIL Skype   Вверх
g27
Дата 27.1.2013, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 29.9.2007
Где: Vilnius

Репутация: нет
Всего: нет



Хотя может это не возможно и именно это имелось ввиду тут "В node всё работает параллельно, за исключением вашего кода" ?
PM MAIL Skype   Вверх
g27
Дата 27.1.2013, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 29.9.2007
Где: Vilnius

Репутация: нет
Всего: нет



Вообщем, я тут читал ещё. Наверное я взял плохой пример. Те задачи, которые могут занять много времени обычно можно выполнить асинхронными функциями node.js, в которые можно передать callback функцию. В результате node.js подвисать не будет. А если писать функцию самому, то изначально необходимо избегать таких блокирующих ситуаций. Вообщем решения моему вопросу нет, так как мой вопрос это изначально не правильное решение задачи средствами node.js. Поправьте если я не прав.
PM MAIL Skype   Вверх
Shogun
Дата 28.1.2013, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

Репутация: 1
Всего: 11



Не совсем понятно чего вы хотите достичь, не знаете как передать колбэк?

Код

function first(arg, callback) {
  setTimeout(function() {
    callback(arg);
  }, 1000);
}

first('arg', function(result) {
  console.log(result); // через секунду вернет 'arg'
});



--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
g27
Дата 29.1.2013, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 29.9.2007
Где: Vilnius

Репутация: нет
Всего: нет



нее, дело в том. что во время обработки моего цикла node.js больше ничего не может делать. В том числе и принимать запросы других соединений. Подсказали что для таких задач надо node fibers использовать
PM MAIL Skype   Вверх
Shogun
Дата 29.1.2013, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

Репутация: 1
Всего: 11



Цитата(g27 @  29.1.2013,  12:02 Найти цитируемый пост)
нее, дело в том. что во время обработки моего цикла node.js больше ничего не может делать. В том числе и принимать запросы других соединений. Подсказали что для таких задач надо node fibers использовать 

Ну понятно что while блокирует все, зачем он вам ваще тут нужен? В ноде принято все делать асинхронно. Лучше с начало обдумать код и над тем нужно ли оно вам так чем сразу пихать в node fibers.


--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
g27
Дата 30.1.2013, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 29.9.2007
Где: Vilnius

Репутация: нет
Всего: нет



так конечно)) я об этом и написал выше в итоге, что вопрос изначально я не правильно поставил. Я только начал изучать данную технологию, смотрю возможности и принципы работы
PM MAIL Skype   Вверх
СЭНСЭЙ
Дата 7.2.2015, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Может быть вы мне подскажете, что бы я не создавал еще одну тему?

Как на ноде сделать такое:
1 - выбрать данные из базы, из разных таблиц
2 - обработать их
3 - опять выбрать данные из базы
4 - опять обработать
5 - передавать обработанные данные в разные роуты
Если можно пример.
Потому что я не представляю как это сделать асинхронно

П.С. использую express, mongodb, monk

Это сообщение отредактировал(а) СЭНСЭЙ - 7.2.2015, 19:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Node.js | Следующая тема »


 




[ Время генерации скрипта: 0.1288 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.