从 'wix-users' 获取成员角色

Getting member roles from 'wix-users'

我一直在尝试制作一个页面,根据不同用户的成员角色显示不同的元素。目前,我有两个成员角色:默认 "Member" 和一个新角色 "Sponsors"。我已经使用 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) 在我登录时正确地将 "Sponsors" 记录到控制台。但是, if(roleName === "Sponsors") 的if语句似乎不会运行,无论我做什么。我做错了什么?提前致谢!

看起来您 运行 遇到了 Promises 问题。 getRoles() 函数是一个异步函数。这意味着它不会立即 return 一个值。这也是为什么它有一个 .then().then() 中的代码只是 运行 在由 getRoles() 编辑的 Promise return 解析为一个值之后。

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

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

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

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

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