javascript - 如何将 Promise 方法转换为 Angular 10 中的 rxjs Observables
问题描述
我是打字稿、角度和可观察的新手。我的问题是我有这个方法,它接受一个 URL 并返回该 URL 的图标。我如何使用可观察对象而不是承诺
getFavIcon(url: string): Promise<any> {
return new Promise((resolve, reject) => {
const hostname = this.getDomain(url);
const src = 'http://' + hostname + '/favicon.ico';
const image = new Image();
image.onerror = () => {
reject({ hasFavourite: false });
};
image.onload = () => {
resolve({ hasFavourite: true, imageURL: src});
};
image.src = src;
});
}
解决方案
它的创建与 Promise 非常相似,除了 observable 可以是一个连续流并且你complete()
让它表现得像 Promise
getFavIcon(url: string): Promise<any> {
return new Observable((obs) => {
const hostname = this.getDomain(url);
const src = 'http://' + hostname + '/favicon.ico';
const image = new Image();
image.onerror = () => {
obs.error({ hasFavourite: false });
};
image.onload = () => {
obs.next({ hasFavourite: true, imageURL: src});
obs.complete()
};
image.src = src;
});
}
推荐阅读
- pandas - 如何通过具有 NaN 值的多个(即所有可用的)属性对条目进行分组?
- c# - 当我得到 CompareTo() 时,如何按顺序在排序的 C# 列表中插入多个对象
- r - 在 R 中创建具有多个类别的单个变量
- java - 在定义的时间段后关闭活动
- objective-c - 调用方法时源文件中的目标 C 编辑器占位符
- excel-formula - 对同一列中的不同行数求和
- angular - ngx-scrollbar 不适用于 mat-dialog-content
- ios - 在一个屏幕中拥有一些 UITableViews 和一些 UICollectionViews
- c++ - 将一个类中创建的多地图数据传递给另一个类
- php - Laravel 在 PHPUnit 测试期间断言多个电子邮件收件人