Uncaught (in promise) input is invalid type
时间: 2025-03-08 21:10:44 浏览: 44
### 解决 JavaScript 中 Promise 报错 'Uncaught (in promise) input is invalid type'
当遇到 `input is invalid type` 的报错时,通常意味着传递给某个函数或方法的数据类型不符合预期。对于提供的代码片段而言,问题可能出现在 MD5 加密操作之前未正确处理输入数据类型的转换。
#### 修正代码逻辑
为了防止此类错误的发生,建议在执行敏感操作前先验证变量的合法性:
```javascript
loginBefore(UserName, PassWord) {
return new Promise(function(resolve, reject) {
let loginObj = {};
if (!UserName || !PassWord) {
return reject(new Error('用户名或密码为空'));
}
axios(login).then((res) => {
try {
const encodedUser = Base64.encode(UserName);
const hashedPassword = md5(PassWord);
// 确保所有部分都是字符串形式再拼接
let Login = `${encodedUser}${AccessCode}${hashedPassword}`;
// 继续后续业务逻辑...
} catch (error) {
reject(error);
}
}).catch((err) => {
reject(err);
});
});
}
```
上述修改不仅增加了对输入参数的基础校验,还利用了模板字面量来构建最终的登录凭证字符串,并且将整个过程包裹在一个 `try...catch` 结构里以便更好地捕捉潜在异常[^1]。
另外值得注意的是,在实际项目中应当避免直接暴露像 `AccessCode` 这样的敏感信息于前端环境之中;同时考虑到安全性因素,推荐采用 HTTPS 协议传输账号密码等重要资料[^3]。
#### 使用 async/await 改善可读性和维护性
除了修复当前存在的 bug 外,还可以考虑改写这段异步流程以提高代码质量。借助 ES2017 引入的 `async/await` 特性可以让复杂的多层嵌套变得更加直观易懂:
```javascript
async function loginBefore(userName, passWord) {
if (!userName || !passWord) throw new Error('用户名或密码为空');
try {
const response = await axios.post('/api/login', {});
const encodedUser = Base64.encode(userName);
const hashedPassword = md5(passWord);
// 构建完整的认证串
const loginCredential = `${encodedUser}${AccessCode}${hashedPassword}`;
// 执行进一步的操作...
} catch (error) {
console.error(`Login failed: ${error.message}`);
throw error;
}
}
```
这样不仅可以简化错误处理机制,还能让程序结构更加清晰明了[^2]。
阅读全文
相关推荐


















