Почему async/await работает корректно, хотя ему не передаются коллбэки

107
11 января 2021, 05:40

Пытаюсь разобраться в промисах и async/await. Нашёл на хабре этот пример:

async function getAmount2(userId){ 
    let user =await getUser(userId); 
    let amount = await getBankBalance(user); 
    alert(amount); 
} 
 
getAmount2("1"); 
 
function getUser(userId){ 
    return new Promise((resolve)=>{ 
        setTimeout(()=>{ 
            resolve("John"); 
        }, 10); 
    }); 
} 
 
function getBankBalance(user){ 
    return new Promise((resolve, reject)=>{ 
        setTimeout(()=>{ 
            if(user=='John'){ 
                resolve("1,000$"); 
            }else{ 
                reject("Unknown user!"); 
            } 
        },10); 
    }); 
}
В результате выводится сообщение "1,000$". Но почему? Как я понял из промисов, им надо передавать коллбэки в параметры resolve и/или reject, которые и будут вызываться в промисе. А здесь никакие функции не передаются, но промисы выполняются, и переменные получают свои значения. Но почему? Ведь в этом примере ни resolve, ни reject не реализованы

Answer 1

Обратите внимание на документацию: resolve, как и reject - это методы, которые вы вызываете и в качестве аргумента передаёте значение, с которым промис будет выполнен или не выполнен. Вы, конечно, можете передать и функцию в качестве значения, но она не будет коллбэком, не будет вызвана, если только при обработке результата промиса вы не вызовете её сами.

Так что да, пример корректный, потому и работает.

READ ALSO
Нумерация абзацев JS

Нумерация абзацев JS

Как пронумеровать все абзацы страницы и добавить номер ПЕРЕД текстом абзацев, а не после ?

104
this jQuery не работает

this jQuery не работает

Почему этот код работает:

117
Автозаполнение массива JS с циклом for

Автозаполнение массива JS с циклом for

Хочу заполнить массив числами от 0 до 10

116
Перебор свойств объекта и вывод в таблицу

Перебор свойств объекта и вывод в таблицу

Прошу помощиКак создать таблицу и заполнить значениями,а столбец address вывести city + street (т

89