前言
- promise解决了嵌套地狱的问题,Observable解决了promise只有一个结果,和不可以取消的问题。
- 使用的是rxjs6版本。
- 这篇文章是方便使用Observable的API替换Promise的API。
正常用法
1promise 2.then(result => {}) 3.catch(error => {}) 4.finally(() => {}); 5 6observable.subscribe( 7 result => {}, 8 error => {}, 9 ()=>{}, // finally 10);
then
1promise 2.then(result => {}) 3.then(result => {}) 4.then(result => {}) 5 6import { concat } from 'rxjs'; 7concat(observable0,observable1,observable2).subscribe( 8 result => {}, 9 error => {}, 10 ()=>{}, // finally 11); 12 13// promise 14this.getOne().then(data => { 15 // 这里返回另外一个Promise 16 return this.getTwo(data); 17}).then(data => { 18 console.log(data); // 这里打印第二个Promise的值 19 return this.getThree(data); 20}).then(data => { 21 console.log(data); // 这里打印第三个Promise的值 22}); 23 24// Observable 25import { forkJoin, Observable,from,pipe } from 'rxjs'; 26import { retryWhen, map, mergeMap } from 'rxjs/operators'; 27 28from(this.getOne) 29.pipe( 30 mergeMap(oneData => { 31 console.log(oneData) 32 return from(this.getTwo) 33 }), 34 mergeMap(twoData => { 35 console.log(twoData) 36 return from(this.getThree) 37 }) 38) 39.subscribe(threeData => { 40 console.log(threeData) 41 ... 42})
Promise.all
1Promise.all([promise0, promise1]).then((result)=>{}); 2 3import { forkJoin } from 'rxjs'; 4forkJoin([observable0, observable1]).subscribe(result => {});
Promise.race
1Promise.race([promise0, promise1]).then((result)=>{}); 2 3import { race } from 'rxjs/observable/race'; 4race([observable0, observable1]).subscribe(result => {});