Как я создаю не блокирующуюся асинхронную функцию? Ниже то, чего я пытаюсь достигнуть, но моя программа все еще блокируется...
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");
Эта строка:
while(true);
не "блокирует", она просто занята, навсегда.
Вам необходимо запустить функцию блокировки в отдельном процессе.
Этот модуль может помочь: http://github.com/cramforce/node-worker
Если вы не хотите использовать WebWorker API / node-worker, который все еще находится на стадии альфа-версии, просто создайте дополнительную программу узла и общайтесь через TCP или HTTP.
Это позволяет вам отправлять вашу работу как HTTP-вызовы или необработанные данные TCP и асинхронно ждать ответа HTTP / входящего ответа TCP.
Обратите внимание, что это уместно только в том случае, если ваша задача легко сериализуема.
setTimeout
не создаст новый поток, поэтому браузер по-прежнему будет висеть в бесконечном цикле.
Вам нужно переосмыслить структуру вашей программы.