第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Rxjs 鏈將 observable<File> 轉(zhuǎn)換為 observable<string>

Rxjs 鏈將 observable<File> 轉(zhuǎn)換為 observable<string>

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

2 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊

考慮以下輔助函數(shù),它接受 aBlob作為參數(shù)并返回 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))


查看完整回答
反對(duì) 回復(fù) 2023-11-12
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

沒有現(xiàn)成的方法可以將此加載的事件轉(zhuǎn)換為 rxjs observable。你必須創(chuàng)建自己的運(yùn)算符。


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

   }

})


查看完整回答
反對(duì) 回復(fù) 2023-11-12
  • 2 回答
  • 0 關(guān)注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)