我知道那里有很多关于如何使用RxJs / Observables的教程。
我需要一些非常简单的示例,以了解如何使用http
map
subscribe
和catch
方法将@Injectable()
export class UsersApi {
protected basePath = 'http://localhost:8082/commty/cmng';
constructor(protected http: Http) {
}
public create(user: string, passwd: string, extraHttpRequestParams?: any): Observable<{}> {
return this.createWithHttpInfo(user, passwd, extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json();
}
});
}
public createWithHttpInfo(user: string, passwd: string, extraHttpRequestParams?: any): Observable<Response> {
const path = this.basePath + `/users`;
let queryParameters = new URLSearchParams();
let headers = new Headers(this.defaultHeaders.toJSON()); // https://github.com/angular/angular/issues/6845
// verify required parameter 'user' is not null or undefined
if (user === null || user === undefined) {
throw new Error('Required parameter user was null or undefined when calling create.');
}
// verify required parameter 'passwd' is not null or undefined
if (passwd === null || passwd === undefined) {
throw new Error('Required parameter passwd was null or undefined when calling create.');
}
// to determine the Content-Type header
let consumes: string[] = [
];
// to determine the Accept header
let produces: string[] = [
'application/json'
];
let requestOptions: RequestOptionsArgs = new RequestOptions({
method: RequestMethod.Put,
headers: headers,
search: queryParameters
});
// https://github.com/swagger-api/swagger-codegen/issues/4037
if (extraHttpRequestParams) {
requestOptions = this.extendObj(requestOptions, extraHttpRequestParams);
}
return this.http.request(path, requestOptions);
}
angular2服务用于Observable。
到目前为止,我能够生成服务以便与REST端点进行通信:
map
我使用了UserApi.create(user, password)
方法,但我不太了解它的含义。
我如何使用http.get(...)
方法?
修改
由于userApi.create('user', 'password').subscribe(...)
方法不会在没有订阅的情况下执行,我发现我需要以下任何内容:
subscribe
有人可以填写def text_to_vector
方法吗?
答案 0 :(得分:2)
map函数获取Observable获取的数据,使用提供给它的函数处理它并返回一个新的Observable。
您仍然需要订阅这个新的Observable来启动该过程。
在您的示例中,Observable将仅返回一个响应。如果状态为204,则map函数将采用此响应并将其转换为undefined,否则将其转换为包含的json。
要在本课程之外使用它:
class TestClass {
constructor(private usersApi: UsersApi ) {}
public testFunction() {
this.userApi.create("user", "pass").subscribe(
(result: any) => { // <-- handler for result
console.log(result);
},
(error: any) => { // <-- handler for error
console.log(error);
},
() => { // <-- handler for done
console.log("Done");
},
);
}
}
答案 1 :(得分:1)
map()
只是转换流事件值
您从作为参数传递的流中获取事件值,可以执行某些转换,例如response.json()
,结果是后续运算符的新事件值或subscribe()
没有subscribe()就不会发生任何事情。如果您没有订阅,http.get()将不会向服务器发出请求。
如果您使用|异步管道,那么你不需要自己订阅。管道为你做了
答案 2 :(得分:1)
您需要subscribe
一个Observable函数来实际执行服务。
UserApi.create(user, password).subscribe(
res=> {//do stuffs that have remote data "res" here},
error=> {//do what when "error" happens},
() => console.log('Completed!')
)