Что является эквивалентом в rxjs6 Promise.resolve - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь разрешить после асинхронного вызова API websql.Сейчас я возвращаю обещание, и оно работает.однако, по некоторым причинам, я хотел бы сделать это с помощью наблюдаемых rxjs6.Вы знаете, как вести себя так же с 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);
          });
        });
    });

1 Ответ

1 голос
/ 27 апреля 2019

Создайте новую наблюдаемую, как вы делаете с обещанием, а затем вызовите 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));
...