RxJs Observables和http angular2服务

时间:2016-12-06 08:24:01

标签: angular

我知道那里有很多关于如何使用RxJs / Observables的教程。

我需要一些非常简单的示例,以了解如何使用http map subscribecatch方法将@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方法吗?

3 个答案:

答案 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!')
)