Использование обратных вызовов в Angular Subscribe? - PullRequest
0 голосов
/ 04 июня 2018

Это в моем сервисном файле.Я не могу изменить этот код функции, потому что он используется многими приложениями в приложении.Используется HTTPclient.

getFieldDetailData(request?): Observable<any> {
        return this.http.get(this.apiBaseUrl + '/apiurl', { params: request })
            .catch(err => {
                err.statusmessage = 'fail';
                return err;
            });
    }

И в том же файле я пишу эту функцию, которая будет использоваться для обратных вызовов.

 testCallback(request, successFn, errorFn) {
        this.getFieldDetailData().
            subscribe(
                response => {
                    successFn(response);
                },
                error => {
                    errorFn();
                }
            );
    }

Теперь в моем файле компонента я просто хочу передатьпараметры, методы успеха и ошибки в одной строке примерно такие.

this.service.testCallback.subscribe(this.request, this.success(r), this.error());

Я хочу сделать что-то с ответом, который возвращается в мой компонент с параметром 'r'.Я новичок в наблюдаемых, поэтому я считаю, что я делаю что-то здесь не так ..

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Эта функция, которую вы реализовали, на самом деле не расширяет существующую функциональность, Rxjs уже реализовал эти обработчики для вас.

testCallback(request, successFn, errorFn) {
        this.getFieldDetailData().
            subscribe(
                response => {
                    successFn(response);
                },
                error => {
                    errorFn();
                }
            );
    }

Представьте, что мы переписали эту функцию, и она выглядит так (мы могли бы просто использоватьоригинальная функция getFieldDetailData):

testCallback(request) {
        return this.getFieldDetailData(request);
    }

и теперь в своем компоненте вы можете просто использовать его, как вы хотели:

this.service.testCallback(request).subscribe(
    (r) => { // r will be the result of your request execution
        // your success callback code goes here
    }, 
    (error) => {
        // your exception handling goes here
    });

И, конечно, вы можете сделать их одной строкой, если эти обратные вызовыуже реализованные методы вашего компонента.

0 голосов
/ 04 июня 2018

Вам не нужна вторая функция.В вашем компоненте вы можете просто вызвать первую функцию и подписаться на нее:

ngOnInit() {
    this.yourService.getFieldDetailData().subscribe(response => {
        // do something here with the response.
        // error handling should be done in side the catch() operator
    });
}
...