Как отобразить журнал 'hello' во время работы fibo ()?
Поскольку fibo
синхронно, вы не можете в обычном случае. JavaScript работает на основе потоков, обслуживающих очередь заданий. Пока выполняется одно задание, никакие другие задания не могут выполняться в этом потоке (например, те, которые поставлены в очередь setInterval
для вызова обратного вызова). В realm (только глобальная среда) есть только один поток, и во всех основных средах (включая браузеры) есть только один основной поток. Вы можете создавать других, но у них есть своя собственная среда.
У вас есть пара опций:
- Сделать
fibo
асинхронным, где каждый вызов к нему планирует следующий в другом задание (например, через setTimeout
). - Сделайте
fibo
функцией генератора и несколько раз вызывайте ее для значений, перемежая эти вызовы с вашим обратным вызовом setInterval
. - Используйте рабочий поток.
Поскольку ваш код setInterval
и ваш код fibo
не предоставляют никаких данных, использование рабочего потока имеет смысл:
main.js
:
'use strict';
function fibo(x) {
if (x === 0) {
console.info('fibo( ' + x + ' ) == 0');
return 0;
} else if (x === 1) {
console.info('fibo( ' + x + ' ) == 1');
return 1;
}
return fibo(x-2) + fibo(x-1);
};
new Worker("worker.js");
fibo(10);
worker.js
:
setInterval(() =>{console.info('hello')},10);
Если они совместно использовали данные, вы можете использовать для них разделяемую память , но остерегайтесь проблем с синхронизацией.