我试图在对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);
});
});
});
创建一个新的observable,就像使用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));