我收到以下错误。
类型'响应'的争论不能分配给'响应'类型的参数 财产'身体'类型'响应'
中缺少
我运行的代码依赖于observables。
public register(reporter: Reporter): Observable<Response> {
const content = JSON.stringify(reporter);
const headers = new Headers({ "Content-Type": "application/json" });
const options = new RequestOptions({ headers: headers });
const userUrl = env.Url + "user";
const passwordUrl = env.Url + "PasswordClaim/" + reporter.Id;
const observable = new Observable<Response>(_ => {
this.http
.post(userUrl, content, options)
.subscribe(result => this.http
.get(passwordUrl)
.subscribe(result => _.next(result), error => _.error(error)),
error => _.error(error));
});
return observable;
}
在此之前,我们使用了弱类型的observable,它可以正常工作,但并不像我希望的那样正确和整洁。所以,我在结果上徘徊,并得到 Response 类型的内容。但是,使用它似乎会产生这种奇怪的错误信息。
我可以想象它的不同类以相同的方式命名并放在不同的命名空间中。然而,谷歌搜索没有给我任何确认,更不用说建议如何解决它的解决方案。有suggestions可以省略所有输入,但这不是问题的一部分。
答案 0 :(得分:1)
你在这里做的是返回Observable的Observable。您的方法应该按照
的方式输入public register(reporter: Reporter): Observable<Reporter> {}
或
public register(reporter: Reporter): Observable<any> {}
也许你可以试试看结果?
编辑我现在能更好地掌握您的问题。
尝试这样的事情
public register(reporter: Reporter): Observable<Response> {
const content = JSON.stringify(reporter);
const headers = new Headers({ "Content-Type": "application/json" });
const options = new RequestOptions({ headers: headers });
const userUrl = env.Url + "user";
const passwordUrl = env.Url + "PasswordClaim/" + reporter.Id;
return this.http
.post(userUrl, content, options)
.flatMap(result => this.http.get(passwordUrl));
}
基本上,HTTP调用将返回响应。通过使用订阅,您实际上管理响应。你正在做的是处理响应,返回一个新的自定义响应。
我做的是用flatMap
进行两次调用,并返回最后一次调用的结果。
编辑2 以下是完整的功能:
public register(reporter: Reporter): Observable<Response> {
let ret = {};
const content = JSON.stringify(reporter);
const headers = new Headers({ "Content-Type": "application/json" });
const options = new RequestOptions({ headers: headers });
const userUrl = env.Url + "user";
const passwordUrl = env.Url + "PasswordClaim/" + reporter.Id;
return this.http
.post(userUrl, content, options)
.flatMap(result => {
ret['result1'] = result;
return this.http.get(passwordUrl).map(r => ret['result2'] = r);
});
}