我正在尝试发布授权用户的请求。登录后,我想发送另一个http.post来设置有关该用户的一些信息。到目前为止,我的登录电话有效:(有角)auth_service.ts:
Login() {
let promiseResult : any;
this.http.post<any>('/auth/Login', this.auth_payload).toPromise().then(data => {
promiseResult = data;
console.log("Login call" ,promiseResult)
return promiseResult
});
auth_component.ts:
onSubmit(form : NgForm){
this.authService.Login()
}
我在理解如何使第二个职位要求有效时遇到了麻烦。我想按HTML上的一个按钮,将在该按钮上检索到第二个调用的响应。我应该如何在这两个请求之间建立“连接”?
我已经阅读了有关Promises和Observables的文章,但在这种情况下我不知道如何使用它们。
YourMethod(): Observable < any > {
let firstResult;
let secondResult;
return http.get('////').pipe(
switchMap(res1 => this.http.post<any>('/auth/Login', this.auth_payload).pipe(
map(res2 => [res1, res2])
))
);
}
CallingMethod() {
this.YourMethod().subscribe(([firstResult, secondResult]) => {
/// Some logic
})
}
在promise回调中向第二个端点添加呼叫:
Login() {
let promiseResult : any;
this.http.post<any>('/auth/Login', this.auth_payload).toPromise().then(data =>
{
promiseResult = data;
console.log("Login call" ,promiseResult)
this.setInformation(data)
return promiseResult
});
setInformation(userData) {
let promiseResult : any;
this.http.post<any>('/information/endPoint', userData).toPromise().then(data => {
promiseResult = data;
console.log("set Information call" ,promiseResult)
return promiseResult
});
但是,如果登录名和设置信息位于同一台服务器上,则可以直接在服务器应用程序中进行管理,但是我不确定这在概念上是否正确
无论您从then
获得的回报将被传递到下一个,因此您都可以这样做:
this.http.post<any>('/auth/Login', this.auth_payload)
.toPromise()
.then(data => this.doSomethingMore(data))
.then(moreData => this.doSomethingElse(moreData));
您可以用.then(data => this.doSomethingMore(data))
缩短.then(this.doSomethingMore)
,但为清楚起见,我没有这样做。
如果doSomethingMore
返回一个Promise,它将被执行并将其结果传递给下一个then
。
与可观察的相同:
this.http.post<any>('/auth/Login', this.auth_payload)
.pipe(
switchMap(data => this.doSomethingMore(data)),
switchMap(moreData => this.doSomethingElse(moreData)),
);