我正在调试我的APIService的Post方法,该方法有时会发送两次。这很难调试,因为它有时仅在Post请求中发生。例如,当用户发起创建操作时,在创建新用户时,服务器有时会回答“该用户已存在!”。当我知道一个事实不存在时。
在问题出现后立即查看服务器日志,发现该调用被发送了两次。第一个请求成功创建了该用户,第二个呼叫表明该用户已存在于上一个请求中。因此服务器说,该用户已经存在!这些请求一个接一个地发生,但并非总是如此。服务器也不总是得到2个请求。有时它会按预期运行,然后每隔一段时间就会发布两次...
我尝试将console.log放在ApiService Post方法中,即使发生两次Post,它也会显示一次。我很困惑...
在ApiService中调用Post方法的CreateUser操作:
@Action(CreateUser)
createUser(sc: StateContext<AdminTreeStateModel>, action: any) {
console.log("Create User Action!");
let form = action.payload,
params = {
kouser: {
username: form.username,
fullName: form.fullName,
email: form.email,
role: form.role,
state: form.state,
authType: form.authType
}
};
if (form.authType === 'local')
params.kouser['password'] = form.password;
else if (form.authType === 'external')
delete params.kouser['password'];
return this.apiService.post(this.usersUrl, params).pipe(tap(
(res: any) => {
sc.dispatch(new GetAllUsers(form.role));
this.store.dispatch(new GetUserDetails(form.username));
this.notify.success('Success', `Created ${form.username}.`);
}, (err: any) => {
if (err.status === 401 || err.json().message === 'Invalid Credentials') {
this.store.dispatch([new Unauthorized(), new Logout()]);
}
this.notify.error('Error', err.json().message);
})
);
}
ApiService Post方法:
post(route: string, payload?: any): Observable<Response> {
console.log("POST API SERVICE WAS CALLED!!!!!!!!!!!!!!!");
let headers = new Headers;
let data = {
data: payload
};
this.setHeaders(headers);
let reqOptions = new RequestOptions({
body: data,
headers: headers,
url: `${this.url}${route}`
});
return this.http.post(this.url, reqOptions.body, reqOptions);
}
我希望每个呼叫仅发送一次Post,但是它有时会发送两次Post请求。验证后端的服务器有时会收到两个请求。我只在Post上注意到这种情况。