Что вернёт функция, промис или строку?
Функция:
function f() {
return get().then(function() {
return "text";
});
}
get() - это некая функция которая инкапсулирует какую-либо логику и возвращает промис.
Функция вернет результат выполнения метода Promise.then() - этот метод всегда возвращает новый промис.
console.log(f().constructor.name);
function f() { return get().then(function() { return "text"; }); }
function get() { return Promise.resolve(); }
Написанное выше, относится к случаю когда коллбэк в then выполняется. Если же он не будет выполнен из-за ошибки/reject'а в функции get() - тогда f() вернет именно ее результат (тоже промис).
Единственный случай, когда f() может не вернуть промис - это случай когда выполнение прерывается в синхронном коде: до того, как get() вернет промис. То есть, когда f() не вернет вообще ничего, т.к. фактически не выполнится.
Пример:
console.log(f().constructor.name);
function f() { return get().then(function() { console.log('hello'); return "text"; }); }
function get() {
there.is.no.spoon; // тут будет ошибка выполнения
return Promise.resolve();
}
Подобная ситуация исключена, если код get будет обернут в коллбэк промиса (потому что тогда код выполнится асинхронно, и get() вернет результат до его выполнения):
console.log(f().constructor.name);
function f() { return get().then(function() { return "text"; }); }
function get() {
return new Promise(resolve => {
there.is.no.spoon; // тут будет ошибка, и выполнение перейдет в callback ближайшего .catch()
resolve();
});
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей