Как вернуть bool/string/other если внутри происходит работа с await?
Ключевое слово async перед функцией гарантирует, что эта функция в любом случае вернёт промис.
Что делать если необходимо сделать функцию которая что-то чекает, должна вернуть не промис, но она опирается на результат работы аякс запроса или нескольких?
Нужно, чтобы функция возвращала например void или bool/string/object или любой другой результат, но при этом внутри себя содержала await?
Как пример (не смотрите на проверку прав пользователя, это просто пример, можно подставить что угодно):
let userHasPermission = () => {
let result = // await тут обращение к серверу в ожидании проверки
return result.hasPermission;
};
let showButtons = () => {
if (userHasPermission())
btn.show();
}
showButtons();
Писать userHasPermission().then(() => { btn.show(); } ) ?
Можно ли как-то без then? Чтобы было наглядное if (что-то), и возврат не промис в функции с await?
Ответы (1 шт):
Вот так можно использовать - красиво и наглядно. Возвращать из userHasPermission сразу hasPermission.
//emulating AJAX request
let getUser = async() => {
return new Promise(resolve => setTimeout(() => resolve({
hasPermission: true
}), 3000));
}
let userHasPermission = async() => {
let result = await getUser();
return result.hasPermission;
};
let showButtons = async() => {
if (await userHasPermission())
console.log('btn show');
}
console.log('will show "btn show" after 3 seconds');
showButtons();