Promise.resolve

时间:2019-04-26 22:54:44

标签: observable es6-promise web-sql rxjs6

我正在尝试异步调用websql api后解决。 现在,我正在返回一个Promise,并且它正在运行。但是,出于某些设计原因,我想使用rxjs6 observables来实现。 您知道如何使用rxjs进行相同的行为吗?

请考虑到tx.executeSqlwebsqlDatabase.transaction返回void并且我无权访问这些函数的代码。

预先感谢

    return new Promise((resolve, reject) => {
        this.websqlDatabase.transaction(tx => {
          tx.executeSql(statement, params, (transaction, results) => {
            resolve(results);
          }, (transaction, error) => {
            reject(error);
          });
        });
    });

1 个答案:

答案 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));