Возврат объекта внутри switchMap - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в программировании на rjxs, поэтому мне интересно, как я могу сделать следующее:

    const downloadUrls$: any = filelist.map((file: any) => {
      const fileName = ...
      const path = ...
      const fileRef = ....
      const task: any = ...

      // get notified when the download URL is available
      return task.snapshotChanges().pipe(
        filter(snap => snap.state === TaskState.SUCCESS),
        switchMap(() => from(fileRef.getDownloadURL()))
      );
    });

Так что в приведенном выше коде вместо выполнения from(fileRef.getDownloadURL()) есть способ, которым я могу создать такой объект, как ниже и возвращаемым будет список объектов ниже.

             from (
                {
                 name: fileName,
                 filepath: fileRef.getDownloadURL(),
                 relativePath: path
                }
              )

Подпись метода

 `.getDownloadURL(): Observable<any>`  

1 Ответ

0 голосов
/ 22 апреля 2020

У меня нет ничего работоспособного из предоставленного вами кода, поэтому я пишу это просто как концепцию.

То, что у вас есть, является чем-то, что уже является наблюдаемым (fileRef.getDownloadURL()) , И нам нужен новый объект. Мы можем достичь этого, нанеся на карту наблюдаемое ранее и изменив его на нужный нам результат. Что-то вроде:

task.snapshotChanges().pipe(
    filter(snap => snap.state === TaskState.SUCCESS),
    switchMap(() => {
        return fileRef.getDownloadURL().pipe(
            map(url => ({
                name: fileName,
                filepath: url,
                relativePath: path
            }))
        );
    })
);
...