AngularFire Speicher Aufgabe beobachtbaren nie abgeschlossen

stimmen
1

Ich bin eine Kamera Galerie Bild hochladen erfolgreich Feuerbasis, aber ich nicht in der Lage bin zu getDownloadURL () als AngularFire Speicher Aufgabe beobachtbaren nie abgeschlossen ist.

Ich habe die konsultierte Dokumentation nach dem ‚Monitoring - Upload - Prozentsatz‘ - Beispiel Verwendung hier

Bitte können Sie freundlich beraten, was ich falsch mache oder einen alternativen Ansatz empfehlen. Vielen Dank.

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);
      }
    }

relevante Importe

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 india 5 Referenz: https://blog.ionicframework.com/help-test-ionic-native-5/

relevante Neben

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
  },
Veröffentlicht am 19/12/2018 um 14:21
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Sie sehen aus wie Sie 99,9% der Art und Weise sind da, nette Arbeit auf diese! Und vielen Dank für die Links zu dem docs bietet. Ich denke , der Grund , dass die finalize()nie feuern, weil Sie nicht an die zeichn .snapshotChanges(). Ohne .subscribe()Ihren Code wird auf die Änderungen nicht wirklich hören feuerten durch task.snapshotChanges().

Im Beispiel gefunden Sie feststellen , dass es eine ist , .subscribe()nachdem der fest .pipe():

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

So sollte Ihr Code sein:

//---------------------------------
// But this Observable never completes?....
//---------------------------------
task.snapshotChanges().pipe(
    finalize(() => {
        this.downloadURL = fileRef.getDownloadURL();
        console.log('My ImageUrl' + this.downloadURL);
    })
).subscribe();
Beantwortet am 09/01/2019 um 13:18
quelle vom benutzer

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