Получение ролей членов от '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" будет первая роль.

Другие вопросы по тегам