不知道在verifyPassword之前是否要放置await...如果我在verifyPassword之前删除await,吐司不会关闭,程序会无限运行。
onSubmit函数:
onSubmit: async (values) => {
let loginPromise = await verifyPassword({
username: username,
password: values.password,
});
toast.promise(loginPromise, {
loading: "Checking...",
success: <b> Login successfully...</b>,
error: <b> Incorrect Password </b>,
});
loginPromise.then((res) => {
let { token } = res.data;
localStorage.setItem("token", token);
navigate("/profile");
});
},
字符串
verifyPassword函数:
//login function
export async function verifyPassword({ username, password }) {
try {
if (username) {
const { data } = await axios.post(`/api/login`, {
username,
password,
});
return Promise.resolve({ data });
}
} catch (error) {
return Promise.reject({ error: "Incorrect password ..." });
}
}
型
我已经在其他提交调用中应用了await,但它工作得很好。
async function onSubmit(e) {
try {
e.preventDefault();
let { status } = await verifyOTP({ username, code: OTP });
if (status === 201) {
toast.success("Verified successfully");
return navigate("/reset");
}
} catch (error) {
return toast.error("Wrong OTP please try again!!!");
}
}
型
verifyOTP函数:
// verify OTP
export async function verifyOTP({ username, code }) {
try {
const { data, status } = await axios.get("/api/verifyOTP", {
params: { username, code },
});
return { data, status };
} catch (error) {
return Promise.reject({ error });
}
}
型
我把await放在第二行,吐司显示(检查......),不要走开。我是React的新手,所以我认为一旦verifyPassword resolve或reject promise,那么加载消息必须关闭,但它没有。但是如果我在verifyPassword之前删除await,那么应用程序就可以完全正常工作。现在我很困惑在哪里使用await。
1条答案
按热度按时间gr8qqesn1#
await
运算符不返回promise,所以loginPromise
不是promise,而是数据对象。这意味着您没有将promise作为第一个参数传递给toast.promise
,也意味着它没有.then
方法。为了解决这个问题,不要在这里使用
await
,而是真正获取verifyPromise
返回的promise。然后,使用toast.promise
返回传递给它的promise,await
返回传递给它的promise以获取res
对象。不需要更多的then
调用来处理这些数据:字符串