AngularFire przechowywania zadanie obserwowalne nigdy nie kończy

głosy
1

Jestem przesyłając obraz z kamery do galerii powodzeniem Firebase, jednak nie jestem w stanie getDownloadURL () jako zadanie przechowywania AngularFire obserwowalne nigdy nie kończy.

Mam konsultacji z dokumentacją w następstwie „Monitorowanie wysyłania procentach” - przykład użycia tutaj

Proszę uprzejmie można doradzić, co robię źle lub polecić alternatywne podejście. Dzięki.

async onCamera(){
      try{
          const options: CameraOptions = {
          quality: 100,
          targetHeight:500,
          targetWidth:500,
          allowEdit: true,
          correctOrientation: true,
          sourceType: this.camera.PictureSourceType.PHOTOLIBRARY,
          destinationType: this.camera.DestinationType.DATA_URL,
          encodingType: this.camera.EncodingType.JPEG,
          mediaType: this.camera.MediaType.PICTURE
        }
        const imageData = await this.camera.getPicture(options);
        const image = 'data:image/jpeg;base64,' + imageData;
        const id = Math.random().toString(36).substring(2);
        const user = this.authenticatorService.getUser();
        const fileRef = this.afStorage.ref(user.uid + '/images/categories/'+id);
        const task = fileRef.putString(image, 'data_url');
        console.log('Done! - I can see this comment successfully logged to the terminal');
        //---------------------------------
        // But this Observable never completes?....
        //---------------------------------
        task.snapshotChanges().pipe(
          finalize(() => {
            console.log('Sequence complete'); // Execute when the observable completes: never logged
            this.downloadURL = fileRef.getDownloadURL();
            this.downloadURL.subscribe(url=> this.imageUrl=url);
            console.log('My ImageUrl' + this.imageUrl); // Never logged to terminal?
          }));

        console.log('Finished! - I can see this comment successfully logged to the terminal');
      } catch(e) {
        console.error(e);
        this.errorMessage = JSON.stringify(e);
        console.log(this.errorMessage);
      }
    }

istotne Imports

import { AngularFireStorage, AngularFireStorageReference, AngularFireUploadTask } from '@angular/fire/storage';
    import { Observable } from 'rxjs/Observable';
    import { Camera, CameraOptions} from '@ionic-native/camera/ngx';
    import { finalize } from 'rxjs/operators';

Ionic Native 5 referencyjny: https://blog.ionicframework.com/help-test-ionic-native-5/

istotne Zależności

dependencies: {
    @angular/animations: 6.1.0,
    @angular/common: 6.1.0,
    @angular/compiler: 6.1.0,
    @angular/compiler-cli: 6.1.0,
    @angular/core: 6.1.0,
    @angular/fire: ^5.1.0,
    ....
    @ionic-native/camera: ^5.0.0-beta.22,
    @ionic-native/core: ^5.0.0-beta.22,
    ...
    cordova-plugin-camera: ~4.0.3,
    ...
    firebase: ^5.5.9,
    ionic-angular: 3.9.2,
    promise-polyfill: ^8.1.0,
    rxjs: ^6.3.3,
    rxjs-compat: ^6.3.3,
    cordova-android: ~7.1.4
  },
Utwórz 19/12/2018 o 14:21
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Wyglądasz jakbyś 99,9% drogi tam dobrą robotę na ten jeden! I dzięki za udostępnienie łącza do dokumentów. Myślę, że powodem, że finalize()nigdy nie jest wypalanie się tak dlatego, że nie są subskrybowania .snapshotChanges(). Bez .subscribe()kodu nie będzie faktycznie słuchać zmian wystrzelone przez task.snapshotChanges().

Na przykład znalezionej zauważyć, że jest .subscribe()zatrzymany na po .pipe():

// get notified when the download URL is available
task.snapshotChanges().pipe(
    finalize(() => this.downloadURL = fileRef.getDownloadURL() )
)
.subscribe()

Więc kod powinien być:

//---------------------------------
// But this Observable never completes?....
//---------------------------------
task.snapshotChanges().pipe(
    finalize(() => {
        this.downloadURL = fileRef.getDownloadURL();
        console.log('My ImageUrl' + this.downloadURL);
    })
).subscribe();
Odpowiedział 09/01/2019 o 13:18
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more