亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Rxjs 鏈將 observable<File> 轉換為 observable<string>

Rxjs 鏈將 observable<File> 轉換為 observable<string>

收到一只叮咚 2023-11-12 14:46:08
我有一個工作代碼將我的 File 對象轉換為 base64:let reader = new FileReader();     reader.readAsDataURL(myFile);     reader.onload = () => {         let resultStrOrArrayBuf = reader.result;         if (!(resultStrOrArrayBuf instanceof ArrayBuffer)) {            ..do something with resultStrOrArrayBuf         }    };但是我現在必須將這部分集成到現有的 rxjs 鏈中。在鏈中,我收到 File 對象,并希望繼續轉換的 Base64 結果。然而,轉換是在onload事件的幫助下完成的。有什么方法可以將此事件轉換為新的可觀察對象并將其傳遞到鏈嗎?
查看完整描述

2 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

考慮以下輔助函數,它接受 aBlob作為參數并返回 an Observable<string>:


function blobToBase64(blob: Blob): Observable<string> {

  return new Observable<string>(observer => {

      const reader = new FileReader();

      reader.onerror = observer.error;

      reader.onabort = observer.error;

      reader.onload = () => observer.next(reader.result as string);

      reader.onloadend = observer.complete;

      reader.readAsDataURL(blob);


      return {

        unsubscribe: reader.abort

      }

  })

}

用法:


declare const fileObservable: Observable<File>;


fileObservable

  .pipe(switchMap(blobToBase64))

  .subscribe(base64 => console.log(base64))


查看完整回答
反對 回復 2023-11-12
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

沒有現成的方法可以將此加載的事件轉換為 rxjs observable。你必須創建自己的運算符。


export const dataUrlToObs = myFile => new Observable<string | ArrayBuffer>(subscriber => {

  const reader = new FileReader();

  reader.readAsDataURL(myFile);

  reader.onload = () => {subscriber.next(reader.result); subscriber.complete(); };

  reader.onerror = () => subscriber.error(reader.error);

  return () => reader.abort(); // cancel function in case you unsubscribe from the obs

}

稍后可以這樣使用:


..chain

switchMap(myFile => dataUrlToObs(myFile)),

tap(resultStrOrArrayBuf => {

   if (!(resultStrOrArrayBuf instanceof ArrayBuffer)) {

         ..do something with resultStrOrArrayBuf

   }

})


查看完整回答
反對 回復 2023-11-12
  • 2 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號