从“ wix用户”获取成员角色

时间:2018-08-14 02:47:22

标签: wixcode

我一直试图制作一个页面,以根据不同用户的成员角色显示不同的元素。目前,我有两个成员角色:默认的“成员”和新的角色“赞助人”。我已经使用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()的promise正在根据我的调试结果进行解析,并且console.log(roleName)在我登录后正在正确地将“ Sponsors”登录到控制台。但是,看来 if(roleName === "Sponsors") 的if语句将无法运行,无论我做什么。我在做什么错?预先谢谢你!

1 个答案:

答案 0 :(得分:1)

好像您遇到了Promises问题。 getRoles()函数是一个异步函数。这意味着它不会立即返回值。这就是为什么它有一个.then()的原因。 .then()中的代码仅在getRoles()返回的Promise解析为值之后运行。

您可能想查看一些有关JavaScript Promises的资源。 Wix Code还有一个article,描述了如何使用专门针对Wix Code的Promises。

检查roleName是否为"Sponsors"的代码实际上在设置roleName的值的代码之前运行。这就是为什么它不起作用。您需要将该代码添加到.then()中。

currentUser.getRoles()
  .then( (roles) => {
     var firstRole = roles[0];
     roleName = firstRole.name;      
     if(roleName === "Sponsors"){
       $w('#text13').show();
  } );

或者,您可以使用async / await处理异步代码。

请注意,此示例可能仍然无法工作,因为您仅在检查用户的第一个角色。如果用户有多个角色,我认为不能保证"Sponsors"将是第一个角色。