Получение ролей членов от 'wix-пользователей'
Я пытался создать страницу, которая отображала бы разные элементы на основе ролей разных пользователей. В настоящее время у меня есть две роли участника: по умолчанию "Участник" и новая роль "Спонсоры". Я получил роли членов, используя модуль wix-users как таковой.
import wixUsers from 'wix-users';
$w.onReady(function () {
//TODO: write your page related code here...
var roleName;
let currentUser = wixUsers.currentUser;
currentUser.getRoles()
.then( (roles) => {
var firstRole = roles[0];
roleName = firstRole.name; // "Role Name"
console.log(roleName);
var roleDescription = firstRole.description; // "Role Description"
}).catch(
onFailure()
);
if(roleName === "Sponsors"){
$w('#text13').show();
}
});
Я знаю, что обещание getRoles() разрешается на основе моей отладки, и console.log(roleName)
при входе в систему правильно регистрирует "Спонсоров" на консоли. Однако, кажется, что оператор if if(roleName === "Sponsors")
не буду бегать, что бы я ни делал. Что я делаю неправильно? Заранее спасибо!
1 ответ
Похоже, вы столкнулись с проблемой обещаний. getRoles()
Функция асинхронная. Это означает, что он не возвращает значение сразу. Именно поэтому он имеет .then()
, Код в .then()
запускается только после обещания, возвращенного getRoles()
разрешается до значения.
Возможно, вы захотите проверить некоторые ресурсы об обещаниях JavaScript. В Wix Code также есть статья, описывающая, как работать с Promises, специально разработанной для Wix Code.
Код, где вы проверяете, если roleName
является "Sponsors"
на самом деле выполняется перед кодом, где вы устанавливаете значение roleName
, Вот почему это не работает. Вам нужно вытащить этот код в .then()
,
currentUser.getRoles()
.then( (roles) => {
var firstRole = roles[0];
roleName = firstRole.name;
if(roleName === "Sponsors"){
$w('#text13').show();
} );
Кроме того, вы можете использовать async
/await
разобраться с асинхронным кодом.
Обратите внимание, что этот пример все еще может не работать, потому что вы проверяете только первую роль пользователя. Если у пользователя несколько ролей, я не думаю, что есть какая-либо гарантия, что "Sponsors"
будет первая роль.