Привет, я новичок в JS, и у меня проблема с этим:
Моя задача - преобразовать эту блокирующую функцию в неблокирующую функцию,
Вы можете помочь?
Оригинальный код:
setTimeout(() => console.log('Blocked!'), 1000);
function blocking() {
let a = 0;
for (let i = 0; i < 1000; i++) {
for(let j = 0; j < i * 10000; j++) {
if (i < j) {
a++;
}
}
}
}
blocking();
Мое первое решение, оно совсем не работает,
не блокирует мой пользовательский интерфейс, но нет журналов консоли с номером a:
function function1()
{
let a=0;
let i=0;
console.log("start");
(function (){
var condition = true;
function codeBlock()
{
if (condition === true)
{
{
for(let j = 0; j < i * 10000; j++)
{
if (i<j)
{
a++;
}
}
}
console.log(a);
if (i<1000)
i++;
else
condition = false;
setTimeout(codeBlock,100);
}
else
{
console.log("done");
}
}
})
}
function1();
Моя вторая попытка ее решения:
этот тоже не работает, блокирует пользовательский интерфейс.
let a = 0;
function inner(i)
{
for(let j = 0; j < i * 10000; j++) {
if (i < j) {
a++;
}
}
}
function blocking() {
for (let i = 0; i < 1000; i++) {
setTimeout(inner, i*50,i);
}
}
console.log('Starting!')
blocking();
console.log('Done!')