我想每分钟向我的 users/login API 发送一个请求,如果我将 setinterval (login , 6*6000)
放在端点中,则不适用于 async wait ,如果我将其放在 index.html
中,则不会在其他页面和控制台中声明登录函数:login 未在配置文件中声明
。
登录端点位于React目录中:
export const login = async user => {
try {
const response = await axios.post('users/login', {
username: user.username,
password: user.password
});
localStorage.setItem('usertoken', response.data);
return response.data;
}
catch (err) {
console.log(err);
}
}
这是 React 中的登录处理:
onSubmit(e) {
e.preventDefault();
const user = {
username: this.state.username,
password: this.state.password
};
login(user).then(res => {
if (res) {
this.props.history.push(`/profile`);
} else {
console.log('couldnt login');
}
})
}
Edit : I have done this, it is making a request but not logging in:
export const login = async user => {
try {
setInterval(async () => {
const response = await axios.post('users/login', {
username: user.username,
password: user.password
});
localStorage.setItem('usertoken', response.data);
return response.data;
} , 6*1000);
} catch (err) {
console.log(err);
}
}
最佳答案
顾名思义,您的登录函数应该简单地执行以下操作:
/**
* Performs login and returns the promise
* Sets the user to local storage on success
* Logs and throws on failure
*/
export const login = (user) => (
axios.post('users/login', {
username: user.username,
password: user.password
}).then((response) => {
localStorage.setItem('usertoken', response.data);
return response.data;
}).catch((error) => {
console.log('Login Failed');
throw error;
})
);
然后,您的 onSubmit
函数应该自行处理此登录循环。我还在组件中添加了 loginInterval
属性以及 stopLoggingIn
方法,以防您最终想要无限期地停止登录。
import { login } from 'somewhere';
// Component code...
/**
* Performs login every minute
*/
onSubmit = (e) => {
e.preventDefault();
const user = {
username: this.state.username,
password: this.state.password
};
this.loginInterval = setInterval(() => {
login(user).then((data) => {
if (data) {
this.props.history.push('/profile');
}
else {
console.log('Something went wrong');
}
});
}, 60 * 1000);
}
/**
* Clears the login interval
* In case you want to stop logging in in a loop
*/
stopLoggingIn = () => {
clearInterval(this.loginInterval);
}
// Rest of component code...
最后一点,您可能已经注意到我没有使用 async
或 await
,这是因为您在您的情况下并不真正需要它们。重定向到应用程序仅在成功登录时执行,并且没有理由使用 await
阻止代码,因为我没有看到任何仅应在登录后执行且不在登录请求的回调中的关键语句。
关于node.js - 我如何每分钟发送此登录请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57108622/