2016-04-10 7 views
0

Я новичок в node.js. Я уже изучаю, как запускать мой код за пределами loop.js цикла потока (цикл событий) в google, но не может получить ответ.Запуск кода за пределами thread.js цикла потока

Как создать функцию, которая запускает цикл событий вне узла. , например, в мангуст, это использовать

scheme.save(function(err)){ 
    console.log('saved'); 
}); 

для вставки данных, где узел запуска кода вставки (функция сохранения) вне цикла обработки событий, а затем обратно в цикл обработки событий, чтобы запустить свой обратный вызов (в приведенном выше примере, делая некоторые регистрации).

я попробовать

function getUser(id, callback) { 
    setTimeout(function() { 
     console.log('executed'); 
     callback(null, "jhon"); 
    }, 5000); 
    } 

    function display(err,user) { 
     console.log(user); 
    } 

    getUser(432, display); 
    console.log('this show first'); 

но работать синхронно (он блокирует цикл событий в течение 5 секунд, прежде чем новый запрос обрабатывается).

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

+0

Почему вы думаете, он блокирует цикл событий? –

+0

прочитайте обновленный вопрос. Я пытаюсь запустить код выше на 2 разделенных вкладках. и второй журнал «это шоу первым» регистрируется после появления первого журнала «jhon». Я делаю это неправильно? – gitong0315

+0

распечатать что-то вроде: «это шоу первый» «Йона» «это шоу первый» «Йон» вместо 'этого шоу первого этого шоу первого джон john' – gitong0315

ответ

0

Как @SteveCampbell сказал - вы ошибаетесь, полагая, что setTimeout(function() { /// }, 5000) будет блокировать цикл событий - это не будет. Он будет просто задерживает выполнение кода внутри функции в течение 5 секунд.

В то время как последние 5 секунд, двигатель NodeJS полностью работоспособен и может выполнять другие действия, принимать и отправлять сетевые запросы и выполнять любые другие операции ввода-вывода.

enter image description here Проверка на этих ресурсов на события природы и пути петли NodeJS, чтобы правильно использовать его:

UPD

«код как выборка rss-данных» - снова только создает задачу и добавляет обратный вызов, который выполняется, когда задача выполнена. Это не блокирует что-либо, это основная классная идея для асинхронного кода NodeJS. Проверить здесь example rss reader in NodeJS:

//1 - task configuration 
var req = request('http://somefeedurl.xml') 
    , feedparser = new FeedParser([options]); 

// here while rss is being retrieved in a separate sub task 
// nodejs engine can do other tasks 

//2- callback for error 
req.on('error', function (error) { 
    // handle any request errors 
}); 
//2- callback for response with data 
req.on('response', function (res) { 
//... 
+0

, пожалуйста, прочитайте обновленный вопрос. Я пытаюсь запустить код выше на 2 разделенных вкладках. и второй журнал «это шоу первым» регистрируется после появления первого журнала «jhon». \t напечатать что-то вроде: «это первое шоу» «jhon» «это шоу сначала» «jhon» вместо «это шоу сначала» «это шоу сначала» «john» «john» – gitong0315

+0

что делать, если в функции getUser iam делать длинный код, например, получать данные rss? блокирует ли он цикл событий или автоматически создает для меня новый процесс? это реальный вопрос. settimeout - это всего лишь мой подход к симуляции длинного кода – gitong0315

+0

проверить обновленный ответ – shershen