为何Promise的then()未触发、返回值异常且async判断结果错误?
问题分析与修复方案
核心问题1:isTokenExists 未正确触发Promise状态变更
你在isTokenExists里创建了外层Promise,但内部错误地用Promise.resolve()代替了外层Promise的resolve回调——这只会生成新的已决Promise,不会改变外层Promise的状态,导致它一直处于pending,自然不会触发后续的.then()。另外还误用了位运算符|,应该用逻辑或||。
修复后的isTokenExists
export const isTokenExists = () => { return new Promise((resolve) => setTimeout(() => { const token = localStorage.getItem("Token"); // 替换位运算符为逻辑或,直接调用resolve变更外层Promise状态 if (token === null || token === undefined) { console.log("token null or undefined"); resolve(false); } else { resolve(true); } }, 3000) ); };
核心问题2:tokenExist 写法优化(可选)
await和.then()混用虽语法合法,但没必要,直接用await更简洁:
export const tokenExist = async () => { const result = await isTokenExists(); console.log(result); return result; };
核心问题3:Signin.js 未正确处理异步返回值
tokenExist()是异步函数,返回的是Promise对象,而Promise在布尔判断中永远是真值,所以if(tokenResult)永远走true分支。必须等待Promise完成后再判断:
修复后的Signin.js
// 用async/await处理 const checkToken = async () => { const tokenResult = await tokenExist(); if (tokenResult) { console.log('token result success'); } else { console.log('token result failed'); } }; checkToken(); // 或者用.then()处理 tokenExist().then(tokenResult => { if (tokenResult) { console.log('token result success'); } else { console.log('token result failed'); } });
验证结果
修复后:
- 当localStorage无Token时,3秒后打印
token null or undefined,随后输出token result failed - 当Token存在时,3秒后输出
token result success
内容的提问来源于stack exchange,提问作者Liam neesan
相关产品推荐
相关产品推荐

