Почему обещают. Все ждут медленных микротасов, даже если все обещают немедленно?Javascript

Форум по Javascript
Ответить
Anonymous
 Почему обещают. Все ждут медленных микротасов, даже если все обещают немедленно?

Сообщение Anonymous »


Примечание: это не дубликат вопросов о блокировке или длительных петли. Здесь нет процессоров или бесконечного цикла-проблема в том, что обещание. Все неожиданно отсрочено из-за не связанных с ними вызовов queemicrotask () . Это тонкое взаимодействие цикла событий/микротаска, а не код блокировки. Удивительно, но обещание. Все все еще, кажется, ждают, пока все они закончат, прежде чем разрешать, даже если сами обещания решаются мгновенно. // This is a synchronous busy loop that blocks the event loop
function busyLoop(iterations) {
const start = Date.now();
while (Date.now() - start < iterations) {
// intentionally blocking
}
}

function microtaskFlood() {
for (let i = 0; i < 1000; i++) {
queueMicrotask(() => {
// Just a microtask that does nothing
});
}
}

async function test() {
console.log('Start');

busyLoop(100); // Blocks event loop synchronously for ~100 ms

// Schedule many microtasks after blocking
microtaskFlood();

// Promise.all waits for these microtasks to finish
await Promise.all([
Promise.resolve('done1'),
Promise.resolve('done2')
]);

console.log('End');
}

test();
< /code>
ожидается: < /strong>
Поскольку как A, так и B разрешены, я ожидал, что обещание будет немедленно разрешить. Это кажется неинтуированным, потому что микротаксика не имеет никакого отношения к или б. Решите, не ожидая не связанных с ними микротаски?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... olve-immed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»