Ключевое слово 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?
if (await userHasPermission()) { ... }илиuserHasPermission().then(...)? – Anton S. Jun 29 '21 at 07:13if (await userHasPermission())неудобно? Наоборот, очень удобно и наглядно! – Stepan Kasyanenko Jun 29 '21 at 08:31if (await userHasPermission().hasPermission), т.е. другой метод будет знать о том, что должны вернуть в предыдущем методе. Можно ли как-то этот момент вырулить?)) – Anton S. Jun 29 '21 at 10:35hasPermissionиз функцииuserHasPermission. У вас кстати в вопросе в коде так и написано :) – Stepan Kasyanenko Jun 29 '21 at 11:15return resultиif (await userHasPermission().hasPermission)а можноreturn result.hasPermission;иif (await userHasPermission())? если второе возможно, тогда уже становится круто) – Anton S. Jun 29 '21 at 15:44await userHasPermission().hasPermission!==(await userHasPermission()).hasPermission– entithat Jun 30 '21 at 12:48