我一直试图制作一个页面,以根据不同用户的成员角色显示不同的元素。目前,我有两个成员角色:默认的“成员”和新的角色“赞助人”。我已经使用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语句将无法运行,无论我做什么。我在做什么错?预先谢谢你!
答案 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"
将是第一个角色。