angular - 创建绑定到现有函数的 Observable
问题描述
我一直在尝试将包中的onCompleteItem
数组函数绑定ng2-file-upload
到我可以订阅的 RxJS Observable 方法。
这是我正在谈论的功能:
onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
..which 在使用中几乎与以下内容相同:
onCompleteItem(item: any, response: any, status: any, headers: any)
这是MyComponent的相关部分,目前正在运行:
imageArray: Image[] = [];
uploader:FileUploader = new FileUploader({
url: '/api/FileUpload'
});
ngOnInit() {
this.uploader.onCompleteItem = (item: any, response: any, status: any, headers: any) => {
const data = JSON.parse(response);
data.forEach(x => {
console.log(x);
this.imageArray.push(x);
}
this.uploader.removeFromQueue(item);
};
}
我尝试将它绑定到 Observable 是通过使用 RxJSbindCallback
函数:
bindCallback(this.uploader.onCompleteItem, {item: any, response: any, status: any, headers: any})().pipe(
tap((item, response) => {
const data = JSON.parse(response);
this.uploader.removeFromQueue(item);
const images = data.map(x => console.log(x) );
this.imageArray.push(...images);
})
).subscribe();
由于一些类型/语法错误,这不起作用。有人对如何将此重写为绑定的 Observable 函数有任何好的建议吗?
解决方案
bindCallback
包装一个在订阅 observable 时调用的函数,例如getJSON(url, callback)
. 您试图通过传递callback
参数来使用它。
相反,您可以尝试该fromEventPattern
函数,它允许您通过它的两个参数指定如何注册事件处理程序,以及如何取消注册。
const {fromEventPattern} = rxjs;
const uploader = {
upload() {
setTimeout(() => {
if (this.onCompleteItem) this.onCompleteItem('arg 1', 'arg 2');
}, 1000);
}
};
const source = fromEventPattern(handler => uploader.onCompleteItem = handler, _ => uploader.onCompleteItem = null);
source.subscribe(([arg1, arg2]) => console.log(arg1, arg2));
uploader.upload();
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.4/rxjs.umd.js"></script>
推荐阅读
- python - flask_sqlalchemy 使用字符串的哈希作为主键
- firebase - 在 Firestore 文档中实现细粒度数据验证
- excel - 我无法将 excel 文件导入 Microsoft 访问
- javascript - 框架 0.8.2 中的 EventListener 不起作用
- swift - NSButton 状态管理
- ruby-on-rails - 如何将 SimpleForm 输入配置为默认为无包装器
- android - 如何配置 gradle 以从资产目录中删除未使用的字体?
- php - 使用php代码“DELETE”,我怎样才能只为那一天保存一个不超过那一天的一个?
- java - 导入的 maven 项目在 STS 中不起作用
- node.js - 没有建议的筹码