2013-11-25 4 views
0

этой ссылка http://greenash.net.au/thoughts/2012/11/nodejs-itself-is-blocking-only-its-io-is-non-blocking/ Я пытаюсь кода два неблокируемой функции:node.js не код блокировки примера сбоя

блокирующего код:

function LongBucle() { 
    for (x=0;x<=10000;x++) { 
     console.log(x); 
    } 
} 

function ShortBucle() { 
    for (x=0;x<=10;x++) { 
     console.log("short "+x); 
    } 
} 

LongBucle(); 
console.log("Long bucle end"); 

ShortBucle(); 
console.log("Short bucle end"); 

Теперь я пытаюсь превратить код не блокирующий код, так что «console.log (« Короткое замыкание »); должен быть показан первым?

function ShortBucle(callback) { 
    for (x=0;x<=10;x++) { 
     console.log("corto "+x); 
    } 
callback(x); 
} 


function LongBucle(callback) { 
    for (x=0;x<=10000;x++) { 
     console.log(x); 
    } 
    callback(x); 
} 


LongBucle(function(err) { 
    console.log('Long bucle end'); 
}); 


ShortBucle(function(err) { 
    console.log('short bucle end'); 
}); 

Но это не сработает. Что я делаю не так?

+0

Вызов обратного вызова по-прежнему блокируется, используйте 'setImmediate' – Fluffy

ответ

1

Добавление обратного вызова не делает ваш код асинхронным. Поскольку Javascript является однопоточным языком, только одна команда выполняется в данный момент времени. Это означает, что этот фрагмент не будет висеть вечно, независимо от того, что вы делаете: (т. Е асинхронно)

function a() { 
    while (true) {} 
} 

a(); 
console.log('Done.'); 

Чтобы обработать некоторое количество кода позже, вы можете использовать process.nexTick() или setImmediate:

function LongBucle(callback) { 
    setImmediate(function() { 
     for (x=0;x<=10000;x++) { 
      console.log(x); 
     } 
     callback(x); 
    }) 
} 

Here is an article пояснение process.nextTick() и цикл событий в Javascript.

+0

Спасибо, setImmediate работал, но тогда я должен принять этот пример веб-страницы, это неправильно? http://greenash.net.au/thoughts/2012/11/nodejs-itself-is-blocking-only-its-io-is-non-blocking/ – user3032175

+0

В каком примере вы говорите? –

Смежные вопросы