![](/img/trans.png)
[英]How do I test an async axios call from a function that's defined inside an ES6 class?
[英]How do use the async function in Es6
我是反應的初學者。 我想在 userEffect 掛鈎中使用異步等待。 但是我遇到了一個語法問題,我無法解決。
代碼:
useEffect(()=>{
checkLogin=async()=>{
await checkUserLogin=()=>{
if(sessionStorage.getItem('username')==null){
loggedIn = false
}
else{
loggedIn = true
}
}
}
})
我的錯誤是:
./src/component/my_router.jsx
SyntaxError: /home/mnt/project/react_js/todo-list/src/component/my_router.jsx: Invalid left-hand side in assignment expression. (24:6)
22 | console.log(sessionStorage.getItem('username'))
23 | checkLogin=async()=>{
> 24 | await checkUserLogin=()=>{
| ^
25 | if(sessionStorage.getItem('username')==null){
26 | loggedIn = false
27 | }
我想在我的 dom 第一次啟動時檢查 session 存儲。 我如何檢查它? 請幫我...
./src/component/my_router.jsx SyntaxError: /home/mnt/project/react_js/todo-list/src/component/my_router.jsx: Invalid left-hand side in assignment expression. (24:6) 22 | console.log(sessionStorage.getItem('username')) 23 | checkLogin=async()=>{ > 24 | await checkUserLogin=()=>{ | ^ 25 | if(sessionStorage.getItem('username')==null){ 26 | loggedIn = false 27 | }
在這里,您似乎正在嘗試進行一些異步聲明。
await checkUserLogin = () => {
但是這個 OFC 不是有效的語法。
我懷疑您打算將checkUserLogin
聲明為async
function,或者您正在嘗試等待 session 存儲。 由於sessionStorage不是異步的,因此無需等待,您可以簡單地訪問該值。
useEffect(() => {
checkLogin = () => {
if(sessionStorage.getItem('username') === null){
loggedIn = false;
} else{
loggedIn = true;
}
}
checkLogin();
}, []);
由於checkLogin
也不需要等待異步代碼,您只需將邏輯放在useEffect
的回調主體中即可。
useEffect(() => {
if(sessionStorage.getItem('username') === null){
loggedIn = false;
} else{
loggedIn = true;
}
}, []);
或者更簡潔
useEffect(() => {
loggedIn = !!sessionStorage.getItem('username');
}, []);
應避免在 useEffect 本身上使用異步。
相反,您應該在 useEffect 掛鈎之外創建 async-await function,然后在內部觸發它。
是這樣的:
const fetchToken = useCallback(async () => {
let response = await getAccessTokenSilently();
setToken(response);
}, [getAccessTokenSilently]);
useEffect(()=>{
fetchToken()
},[fetchToken])
您不能像這樣在 useEffect 中直接使用 Async await 調用,為了實現這種方法,您必須那樣使用它。
useEffect(()=>{
console.log(sessionStorage.getItem('username'))
async function checkUserLogin() {
checkLogin()
}
checkUserLogin();
},[])
const checkLogin = async() =>{
await ()=>{
if(sessionStorage.getItem('username')==null){
loggedIn = false
}
else{
loggedIn = true
}
}
}
或者像這樣
useEffect(() => {
(async() => {
try {
await ()=>{
if(sessionStorage.getItem('username')==null){
loggedIn = false
}
else{
loggedIn = true
}
}
} catch (e) {
console.error(e);
}
})();
}, []);
只能在useEffect中定義調用function
useEffect(() => {
const myFunc= async()=> {
// now you can use await in this
let response = await fetch('URL')
response = await response.json()
dataSet(response)
}
myFunc()
}, [])
您可以這樣定義您的 function:-
useEffect(()=>{
const chechUserLogin = async() => {
const checkLogin = () => new Promise((resolve,reject) => {
if(sessionStorage.getItem('username')==null){
loggedIn = false;
reject(loggedIn);
}
else{
loggedIn = true;
resolve(loggedIn);
}
});
const result = await checkLogin();//checkLogin must return a promise
//process result
}
checkUserLogin();
},[]);
我解決...
useEffect(()=>{
const checkLogin=async()=>{
await (()=>{
if(sessionStorage.getItem('username')==null){
loggedIn = false
}
else{
loggedIn = true
}
})
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.