2016-06-29 1 views
3

を約束:チェーンAJAX要求 - 角度2とES2015は、私が何か行うことができアンギュラ1では

を(擬似コード)

/* part 1 */ 
function myFn1(){ 
    var x = $http.get('myurl'); 

    x.then(
     () => {}, // do something here 
     () => {} // show error here 
    ); 

    return x; 
} 

/* part 2 */ 
myFn1().then(()=>{ 
    $q.all($http.get('url'), $http.get('url2'), $http.get('url3')) 
    .then(()=>{ /* do something */ }); 
}); 

私は角2

let myFn =() => { 
    return new Promise((res, rej) => { 
     this.http.get('myurl') 
      .subscribe((success) => { 
       // do something here 
       res(success); 
      }, (error) => { 
       // show error here 
       rej(error); 
      }); 
    }); 
} 
でパート1を複製する方法を知っています

しかし、第2の例のコードは、私にとっては、はるかに醜くて読みにくいようです。

質問1:より良い/より良い方法で対応できますか?

そのロジックに続いて、私はGETリクエスト(パート2)をすべて約束し、それをチェーンすることができますが、これをもう一度やり直すことはできません。

質問2:約束どおりに1つのリクエストをラッピングせずに角度2でリクエストをうまくつなげる方法。

答えて

1

、あなたはまだ約束を使用することができます。

myFn1().then(() => { 
    return Promise.all(
    $http.get('url').toPromise().then(res => res.json()), 
    $http.get('url2').toPromise().then(res => res.json()), 
    $http.get('url3').toPromise().then(res => res.json()) 
).then(() => { 
    /* do something */ 
    }); 
}); 
+0

は、私はそれを達成するために、角のいずれかの特定のバージョンが必要ですか?現在、コンパイラは ''toPromise' 'が型' Observable ''に存在せず、現在rc2にあります –

+1

あなたはtoPromise演算子 'import' rxjs/add/operator/toPromise'をインポートするだけです。 – dfsq

+0

それは考えました。ありがとう。 –

3

これにオブザーバブルを活用することができます。

並行して
this.http.get('http://...').map(res => res.json()) 
    .flatMap(data => { 
     // data is the result of the first request 
     return this.http.get('http://...').map(res => res.json()); 
    }) 
    .subscribe(data => { 
     // data is the result of the second request 
    }); 

(等価Promise.allまで)::

Observable.forkJoin([ 
    this.http.get('http://...').map(res => res.json()), 
    this.http.get('http://...').map(res => res.json()) 
]) 
.subscribe(results => { 
    // results of both requests 
    var result1 = results[0]; 
    var result2 = results[1]; 
}); 

に関するエラーこれは、シリーズで

...(チェーンを約束するために同等の)約束を使用する必要はありませんあなたはこのようなものを移行することができます:

その2については210
関連する問題