Firebase 存储 API 触发两次
Firebase storage API triggers twice
我正在尝试使用 Google Firebase 存储 API 来存储我的文件,但是管道被执行了两次。有什么想法让它只触发一次吗?
// def
task: AngularFireUploadTask;
storage: AngularFireStorage;
// code
this.task = this.storage.upload(path, file, { customMetadata });
return this.task.snapshotChanges().pipe(
map(doc => {
console.log('me'); // THIS IS PRINTED TWICE
return doc;
})
);
您可以使用运算符 take()
:
Emits only the first count values emitted by the source Observable.
Returns
MonoTypeOperatorFunction<T>
: An Observable that emits only the first count values emitted by the source Observable, or all of the values from the source if the source emits fewer than count values.
示例:
return this.task.snapshotChanges().pipe(
take(1),
map(doc => {
console.log('me');
return doc;
})
)
根据 documentation,您可以预期管道将在上传过程中接收多个快照。随着时间的推移,这些快照中的每一个都包含一些关于上传状态的信息。
如果您只想知道上传何时完成,请从文档中的示例中获取代码,上传完成后获取下载URL:
task.snapshotChanges().pipe(
finalize(() => this.downloadURL = fileRef.getDownloadURL() )
)
我正在尝试使用 Google Firebase 存储 API 来存储我的文件,但是管道被执行了两次。有什么想法让它只触发一次吗?
// def
task: AngularFireUploadTask;
storage: AngularFireStorage;
// code
this.task = this.storage.upload(path, file, { customMetadata });
return this.task.snapshotChanges().pipe(
map(doc => {
console.log('me'); // THIS IS PRINTED TWICE
return doc;
})
);
您可以使用运算符 take()
:
Emits only the first count values emitted by the source Observable.
Returns
MonoTypeOperatorFunction<T>
: An Observable that emits only the first count values emitted by the source Observable, or all of the values from the source if the source emits fewer than count values.
示例:
return this.task.snapshotChanges().pipe(
take(1),
map(doc => {
console.log('me');
return doc;
})
)
根据 documentation,您可以预期管道将在上传过程中接收多个快照。随着时间的推移,这些快照中的每一个都包含一些关于上传状态的信息。
如果您只想知道上传何时完成,请从文档中的示例中获取代码,上传完成后获取下载URL:
task.snapshotChanges().pipe(
finalize(() => this.downloadURL = fileRef.getDownloadURL() )
)