javascript - Rxjs 链转换 observable可观察的(base64)
问题描述
我有一个工作代码可以将我的 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
事件的帮助下完成的。有没有办法将此事件转换为新的可观察对象并将其传递给链?
解决方案
考虑以下辅助函数,它接受 aBlob
作为参数并返回 a 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))
推荐阅读
- sml - 如何返回一些列表而不是普通列表?
- python - 无法在 CUDA 上下文上同步:CUDA_ERROR_NOT_INITIALIZED:Tensorflow-gpu 在 RTX 2070super 上工作非常缓慢
- javascript - 使用 Angular 应用程序向 Firebase 添加多因素 - 电话号码问题
- objective-c - SideMenu:如何包含在 Objective-C 项目中?
- servlets - Servlet 类 org.restlet.ext.servlet.ServerServlet 不是 jakarta.servlet.Servlet
- asp.net - 将值从页面传递到另一个页面 ASP.net 使用 VB
- html - Django用户认证和登录问题
- python - 比较其他熊猫数据框每一行的值
- java - CVN 14 的 ARQC/ARPC 验证
- node.js - Puppeteer:无法启动浏览器进程!产卵