почему в rxjs наблюдаемое не рассматривается как таковое, если я не использую функцию from? - PullRequest
0 голосов
/ 04 июля 2018

это вопрос, чтобы понять немного больше о rxjs и о том, как обрабатываются наблюдаемые. Я подключаюсь к моей базе данных в моем модуле базы данных, и по завершении я возвращаю наблюдаемый для моего основного модуля.

    connectToDB: function () {
    return new Observable(
        (observer) => {
            sql.connect((err, result) => {
                if (err) return err;
                observer.next(result);
                observer.complete();
            });
        }

    );
}

в моем основном приложении я слушаю наблюдаемое, а затем делаю несколько запросов, как только оно подключено, вот так:

from(db.connectToDB).switchMap((isConnected)=>{
        const surveyQuestions = db.queryDB("//QUERY"); //this function is exactly the same as connectToDb, only difference is that I return the result of the query
    });

Чего я не понимаю, так это почему, если я возвращаю наблюдаемое в моем модуле БД, почему мне нужно использовать функцию from в моем основном модуле? Я думал, что если я вернусь к наблюдаемой, мне не понадобится. Но если его не использовать, узел не увидит его как наблюдаемый. Есть ли какое-то объяснение этому? Или я что-то не так делаю? Спасибо за ваше время

1 Ответ

0 голосов
/ 04 июля 2018

Метод создания from() используется для создания Observable из Обещаний, массивов и т. Д., Но не функции, которая возвращает Observable. Это означает, что следующий код не будет работать:

const func = () => of(42);

from(func).subscribe(console.log); // error

См. Демонстрацию: https://stackblitz.com/edit/rxjs6-demo-uefr6q?file=index.ts

Итак, есть две вещи:

  • Вам не нужно вообще использовать from. Просто цепь db.connectToDB().switchMap(...).subscribe(...)

  • Если то, что у вас сейчас есть, работает, то похоже, что вы переопределяете db.connectToDB с его возвращаемым значением где-то, потому что это не должно работать, как вы можете видеть в примере выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...