Tambahkan Promise untuk setiap item array ke sebuah `Promise.all ()`

0
Pilih

Saya memiliki kode berikut di mana saya mengulang melalui daftar dengan nama dan menggunakan setiap nama untuk mengambil dalam hal ini rumah masing-masing. Ini berfungsi dengan baik, tapi saya ingin menyertakan semua janji ke Promise.all() -bagaimana saya bisa secara dinamis menambahkan Janji untuk setiap nama ke Promise.all()? Apa praktik yang baik di sini?

Saya memiliki kode berikut di mana saya mengulang melalui daftar dengan nama dan menggunakan setiap nama untuk mengambil dalam hal ini rumah masing-masing. Ini berfungsi dengan baik, tetapi saya ingin menyertakan semua promise ke Promise.all() Promise.all () -bagaimana saya bisa secara dinamis menambahkan Promise untuk setiap nama ke Promise.all() Promise.all ()? Latihan apa yang bagus di sini?
list=[
  'Name1',
  'Name2',
  'Name3'
];

this.houses=new BehaviorSubject<any>([]);

const promises=this.greatHouses.map(name=> {
  let house;
  return this.fetchHouse(name).then((result: any[])=> {
    house=result[0];
    return result[0];
  }).then((result: any)=> {
    return this.fetchLord(result.currentLord);
  }).then((result: any)=> {
    const currentLord=Characters.default.find(char=> char.characterName===result.name);
    return [{...house, currentLord}];
  });
});

Promise.all(promises).then(values=> {
  console.log(values);
});

fetchHouse(name: string) {
  return this.http.get(`${this.housesUrl}`, {
    params: {
      name
    }
  }).toPromise();
}

fetchLord(url: string) {
  return this.http.get(url).toPromise();
}
list=[ 'Name1', 'Name2', 'Name3' ]; this.houses=new BehaviorSubject<any>([]); const promises=this.greatHouses.map(name=> { let house; return this.fetchHouse(name).then((result: any[])=> { house=result[0]; return result[0]; }).then((result: any)=> { return this.fetchLord(result.currentLord); }).then((result: any)=> { const currentLord=Characters.default.find(char=> char.characterName===result.name); return [{...house, currentLord}]; }); }); Promise.all(promises).then(values=> { console.log(values); }); fetchHouse(name: string) { return this.http.get(`${this.housesUrl}`, { params: { name } }).toPromise(); } fetchLord(url: string) { return this.http.get(url).toPromise(); } daftar=[ 'Nama1', 'Nama2', 'Nama3' ]; this.houses=new BehaviorSubject([]); const promise=this.greatHouses.map (name=>{ biarkan rumah; kembalikan this.fetchHouse (nama). lalu ((hasil: any[])=>{ rumah=hasil[0]; hasil kembalian[0]; }). lalu ((hasil: any)=>{ kembalikan this.fetchLord (result.currentLord); }). lalu ((hasil: any)=>{ const currentLord=Characters.default.find (char=>char.characterName===result.name); kembali[{... house, currentLord}]; }); }); Promise.all (promise). Lalu (values ​​=>{ console.log (nilai); }); fetchHouse (nama: string) { kembalikan this.http.get (`${this.housesUrl}`, { params: { nama } }).berjanji(); } fetchLord (url: string) { kembalikan this.http.get (url) .toPromise (); }

Sumber

promise javascript typescript angular rxjs

1 -Bergi

1 -Jaromanda X

1 -Bergi

-Tom

-Bergi

-Tom

1 -Bergi

-Tom

1 -Bergi

1 Menjawab
0
Pilih

Jangan gunakan Promises sama sekali. Hanya bekerja dengan Observables jika Anda menggunakan Angular dan HttpClient-nya.

greatHouses=[
  'Name1',
  'Name2',
  'Name3'
];

// Construct and array of Observables that fetch your data
const houses$=this.greatHouses.map(name=> 
  this.fetchHouse(name).pipe(
    // map result to house
    map((result: any[])=> result[0]),
    // map house to an Observable that fetches the lord and return the required data
    switchMap((house: any)=> this.fetchLord(house.currentLord).pipe(
      // map lord to house with currentLord
      map((lord: any)=> {
        const currentLord=Characters.default.find(char=> char.characterName===lord.name);
        return { ...house, currentLord };
      })
    ))
  )
);

// Combine an array of completing Observables with forkJoin to one Observable
forkJoin(houses$).subscribe(houses=> console.log('houses', houses))

// Return Observables and handle errors with `catchError` directly where they occur.
fetchHouse(name: string) {
  return this.http.get(`${this.housesUrl}`, {
    params: {
      name
    }
  }).pipe(
    catchError(error=> {
      console.error('fetchHouse failed', error);
      return of(null);
    })
  );
}

fetchLord(url: string) {
  return this.http.get(url).pipe(
    catchError(error=> {
      console.error('fetchLord failed', error);
      return of(null);
    })
  );
}
Sumber

Anda Mungkin Menarik

© 2021   Pemrograman.Net