как я создаю не блокирующуюся асинхронную функцию в node.js?

Как я создаю не блокирующуюся асинхронную функцию? Ниже то, чего я пытаюсь достигнуть, но моя программа все еще блокируется...

var sys = require("sys");

function doSomething() {
  sys.puts("why does this block?");
  while(true);
}

setTimeout(doSomething,0);
setTimeout(doSomething,0);
setTimeout(doSomething,0);

sys.puts("main");
23
задан Richard 20 May 2010 в 21:31
поделиться

4 ответа

Эта строка:

while(true);

не "блокирует", она просто занята, навсегда.

-6
ответ дан 29 November 2019 в 01:04
поделиться

Вам необходимо запустить функцию блокировки в отдельном процессе.

Этот модуль может помочь: http://github.com/cramforce/node-worker

10
ответ дан 29 November 2019 в 01:04
поделиться

Если вы не хотите использовать WebWorker API / node-worker, который все еще находится на стадии альфа-версии, просто создайте дополнительную программу узла и общайтесь через TCP или HTTP.

Это позволяет вам отправлять вашу работу как HTTP-вызовы или необработанные данные TCP и асинхронно ждать ответа HTTP / входящего ответа TCP.

Обратите внимание, что это уместно только в том случае, если ваша задача легко сериализуема.

4
ответ дан 29 November 2019 в 01:04
поделиться

setTimeout не создаст новый поток, поэтому браузер по-прежнему будет висеть в бесконечном цикле.

Вам нужно переосмыслить структуру вашей программы.

3
ответ дан 29 November 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: