Есть ли лучший способ управлять вложенными звонками? - PullRequest
0 голосов
/ 28 октября 2019

Я работаю с http-запросами, «инкапсулированными» как сервисы в моем js-коде.

Изначально мой код был немного спагетти, используя этот способ:

let user;
let business;

// check if the user is authenticated
authenticationService.isAuthenticated().subscribe(authenticated => {
    // if is authenticated
    if(authenticated) {
         // get the user profile data and save it to the user variable
         profileService.get().subscribe(data => user = data);
         // get the user business data and save it to the business variable
         businessService.get().subscribe(data => business = data);
    }
}); 

Этоработает, но противно. Поэтому я переписал все утверждение так:

authenticationService.isAuthenticated()
    .pipe(
        filter(a => a), // continue only when true
        tap(() => {
            // as above, get data and save to relative variables
            this.profileService.get().subscribe(data => user = data));
            this.businessService.get().subscribe(data => business = data));
        })
     ).toPromise();

Это лучше, но я думаю, что есть еще лучший способ сделать это, просто я этого не знаю.

Я не прав?

1 Ответ

1 голос
/ 28 октября 2019

Вы уже проделали хорошую работу по рефакторингу, хотя все еще есть возможность сделать функцию более чистой и просто выводить результат, а не путаться с переменными. Также старайтесь избегать вложенных subscribe

const getAuthUser=()=>authenticationService.isAuthenticated()
    .pipe(
        filter(a => a), // continue only when true
        switchMap(() => 
            zip(this.profileService.get(),
            this.businessService.get())
        }
     ).toPromise();

getAuthUser().then(([user,business])=> ......)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...