我正在尝试异步调用websql api后解决。 现在,我正在返回一个Promise,并且它正在运行。但是,出于某些设计原因,我想使用rxjs6 observables来实现。 您知道如何使用rxjs进行相同的行为吗?
请考虑到tx.executeSql
和websqlDatabase.transaction
返回void并且我无权访问这些函数的代码。
预先感谢
return new Promise((resolve, reject) => {
this.websqlDatabase.transaction(tx => {
tx.executeSql(statement, params, (transaction, results) => {
resolve(results);
}, (transaction, error) => {
reject(error);
});
});
});
答案 0 :(得分:1)
创建一个新的可观察对象,就像您对Promise所做的那样,然后调用observable.next(<var>)
将结果通过管道传递到订阅的对象。确保您还调用observable.complete()
来通知可观察到的管道可以关闭。
此代码是与上述代码等效的rxjs:
import { Observable } from 'rxjs';
const observable = new Observable(observer => {
this.websqlDatabase.transaction(tx => {
tx.executeSql(statement, params, (transaction, results) => {
observable.next(results);
observer.complete();
}, (transaction, error) => {
observable.error(error);
});
});
});
observable.subscribe(value => console.log(value));