K
K
kirillleogky2019-07-29 10:10:04
JavaScript
kirillleogky, 2019-07-29 10:10:04

How does asynchronous code work?

// Создаётся объект promise
let promise = new Promise((resolve, reject) => {

    setTimeout(() => {
        // переведёт промис в состояние fulfilled с результатом "result"
        resolve("result");
    }, 1000);

});

// promise.then навешивает обработчики на успешный результат или ошибку
promise
    .then(
        result => {
            // первая функция-обработчик - запустится при вызове resolve
            alert("Fulfilled: " + result); // result - аргумент resolve
        },
        error => {
            // вторая функция - запустится при вызове reject
            alert("Rejected: " + error); // error - аргумент reject
        }
    );

I would like to clarify how asynchrony works in this example.
I understand correctly that this code
setTimeout(() => {
        // переведёт промис в состояние fulfilled с результатом "result"
        resolve("result");
    }, 1000);

after 1 second will save the value "result" in resolve?
But before 1 second has passed, resolve goes here and waits for "result" to be saved? And after 1 second has passed, it calls alert with the value resolve?
.then(
        result => {
            // первая функция-обработчик - запустится при вызове resolve
            alert("Fulfilled: " + result); // result - аргумент resolve
        },

Answer the question

In order to leave comments, you need to log in

2 answer(s)
P
Philip Gaponenko, 2019-07-29
@kirillleogky

Initially, the promise you created is in the state pending
Given code

setTimeout(() => {
        // переведёт промис в состояние fulfilled с результатом "result"
        resolve("result");
    }, 1000);

Stored in the promise object and will be called immediately, and when `resolve` is called, this call will trigger a state change event on the promise object.
Because is called, resolvethen the promise goes into the state fulfilledand the value from resolveis passed to the callback, which will be called inside then.
I'm not sure I understand your question correctly, but I hope this helps.
  1. https://learn.javascript.ru/promise
  2. https://habr.com/ru/company/mailru/blog/269465/

H
hzzzzl, 2019-07-29
@hzzzzl

javascript obeys the Event Loop model, the script is executed "in one thread", in each cycle (tick) of this cycle all pending timers, all event handlers, etc. are checked

// Создаётся объект promise
// не происходит ничего, просто сохраняется объект
let promise = new Promise((resolve, reject) => {
// МЕТКА №1 (см.ниже)
// выполняется setTimeout()
// цифра 1 на картинке, код сейчас здесь
    setTimeout(() => {
        // цифра 2 на картинке, через секунду (или когда у процессора будет время)
        // интерпретатор JS будет разбирать timer queue и выполнит коллбек resolve()
        // тем самым "разрешит" промис
        resolve("result");
    }, 1000);

});

// promise.then навешивает обработчики на успешный результат или ошибку
promise
// GOTO метка №1
    .then(
        result => {
            // первая функция-обработчик - запустится при вызове resolve
            // в Timer Queue (возможно) будет ссылка на эту функцию, и она вызовется с аргументом result
            alert("Fulfilled: " + result); // result - аргумент resolve
        },
        error => {
            // вторая функция - запустится при вызове reject
            // в Timer Queue (возможно) будет ссылка на эту функцию, и она вызовется с аргументом result
            alert("Rejected: " + error); // error - аргумент reject
        }
    );

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question