«Вначале были
промисы»
Затем, позже, сделали разноцветный синтаксический фантик для них —
async / await
У промисов держателем кнопки «пауза» являтся очередной промис. У этого промиса, как будильника, можно вызвать метод
then()
— как приклеить стикер на циферблат, где написано, что надо будет сделать, когда время придёт.
В приклеенный метод
then()
ничего не попадает «сразу». Вернее, в него сразу передают 2 функции: одну вызовут, когда промис выполнится; вторую – если обломается:
.then(onResolve, onError)
Стоит будильник, на нём наклейка then, на ней написано, что сделать, если ОК и если облом. Ждём-с. Тикает.
await
прячет под капот движка JS лишние провода, и наверху просто возвращает результат выполненной асинхроты. Или кидает Exception в случае облома — его надо ловить обычными
try..catch
Перечитав вопрос, предположу, что
неправильно готовили промис с запросом. Надо примерно так:
const requestPromise = new Promise(function(res, rej) {
setTimeout( function(result){ // имитация асинхр запроса куда-то
// тут, типа, наконец получили ответ
if (result.error_code) {
rej(error_code); // облом
} else {
res(result); // обещание выполнено с результатом
}
}, 2000);
});
// здесь requestPromise – это Promise в статусе "pending"
requestPromise.then( // сюда ничего не попадает «сразу». Оно внутри ждёт. Терпеливо.
function(result) {console.log(result, "мы молодцы");},
function(error) {console.error(error, "облом вышел");},
);
При желании можно навесить ещё
собак then'ов на тот же Promise:
requestPromise.then(r => console.log("result log:", r));