【发布时间】:2021-07-20 03:27:08
【问题描述】:
我有一个名为permCheck() 的函数,它将根据某些逻辑解析为真或假。我需要从中获取值并在三元表达式中使用它来更改用户看到的内容。然而,它似乎总是返回表达式的真部分,即使permCheck() 为假。
这是正确返回true 或false 的permCheck() 函数:
function permCheck(res) {
let isMember;
return axios.get(window.location.origin + "/username").then((res) => {
axios
.get(
"https://api.endpoint.com/ismember/" +
res.data
)
.then((res) => {
return res.data; // This will be true or false
});
isMember = res.data;
return isMember;
});
}
然后在我的 react 应用程序的返回中,我尝试根据 permCheck 函数更改内容。这似乎总是默认为三元表达式的第一部分。如您所见,我什至在三元表达式中有一个console.log,它正确地返回真或假。
return (
<div className="ui">
<AppLayout
content={
permCheck().then((a) => {
console.log("IN TERNARY: " + a);
Promise.resolve(a);
})
? appContent
: accessDenied
} // Here we expect true or false from permCheck()
navigation={<ServiceNavigation />}
notifications={<FlashMessage />}
breadcrumbs={<Breadcrumbs />}
contentType="table"
tools={Tools}
headerSelector="#navbar"
stickyNotifications={true}
/>
</div>
);
【问题讨论】:
-
你有像 PROMISE 这样的表达吗?应用内容:拒绝访问。 PROMISE 不是假的(它不是未定义或 null 或 0 等),因此无论您的 permCheck 函数返回什么,它都默认为三元运算符的第一个值。
-
您的 permCheck 函数等效于(作为返回值)函数 permCheck(res) { let isMember; return axios.get(window.location.origin + "/username").then((res) => { isMember = res.data; return isMember; }); }
-
@Virtuoz 最好的方法是什么?我不知道还有什么方法可以退货。
-
使用状态变量(
useState或this.state)来跟踪过程,并在 promise 准备好后使用结果更新它(.then())。在那之前,渲染一些加载微调器,或者类似的东西。
标签: javascript reactjs conditional-operator