2017-09-09 11 views
0

RxJSを初めて使用しています。正直なところ、頭がおかしくなりません。だから私はここで尋ねると思って誰かが正しい方向に私をプッシュすることを願っています。RxJSと連続して非同期機能を実行しています

2つのasync http rest呼び出しを行うメソッドを公開する必要があるサービスを作成しています.2番目の残りの呼び出しでは、最初の呼び出しの出力が必要です。私はサービス方法から約束を返す。

だからスェード表現は、これを達成するための最良の方法は何かこの

export class Service { 

     isAuthenticated() { 
     return new Priomise<any>(resolve => { 
      this.http.post('url') 
      .done((result) => { 
      this.http.post('url2', { param: data.param }) 
       .done((result2) => { 
       resolve(result2.json()); 
       }) 
      }) 
     }); 
    } 
} 

任意のアイデアのようになりますか?

多分私はtoPromise()演算子を使用する必要がありますか? Observableを退会しますか?

何か助けていただければ幸いです。

答えて

2

あなたの関数からPromiseを返す必要がある場合は、約束を使用する方がよいでしょう。この場合、Rxのメリットはありません。

また、コードには2つのアンチパターンがあります。 Deferred for no reason and using promises as callbacks

だからあなたのコードは次のようになります約束を使用して:

function getFirstUser() { 
 
    return fetch('https://api.github.com/users') // get list of all users 
 
    .then(response => response.json()) 
 
    .then(users => users[0]['login']) 
 
    .then(username => 
 
     // fetch details of the first user, using his username(login) 
 
     fetch('https://api.github.com/users/' + username) 
 
    ) 
 
    .then(response => response.json()); 
 
} 
 

 
getFirstUser() 
 
    .then(
 
    user => console.log(user), 
 
    e => console.log('got an error') 
 
);

そしてRxJSバージョン:目のため

function getFirstUser() { 
 
    return Rx.Observable.ajax('https://api.github.com/users') 
 
    .map(res => res.response) 
 
    .map(users => users[0]['login']) 
 
    .switchMap(username => 
 
     Rx.Observable.ajax('https://api.github.com/users/' + username) 
 
    ) 
 
    .map(res => res.response); 
 
} 
 

 
getFirstUser() 
 
    .subscribe(
 
    user => console.log(user), 
 
    error => console.log('got an error'), 
 
    () => console.log('completed') 
 
)
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

+0

おかげでeアドバイス - 意味があり、私を助けました! –

関連する問題