Свойство 'connect' не существует для типа 'Observable < any >' | RXJS многоадресная рассылка

Существует множество причин не хранить идентификаторы в списках с разделителями-запятыми:

  • Значения должны храниться с использованием соответствующего типа. Номера не должны храниться в виде строк.
  • Внешние ключи должны быть правильно объявлены.
  • SQL-таблицы традиционно имеют одно значение для каждого столбца, а не номер переменной.
  • SQL имеет довольно плохие возможности обработки строк.
  • Запросы на такие структуры не могут легко использовать индексы.
  • SQL имеет действительно отличную структуру данных для хранения списков. Это называется table.

Иногда мы придерживаемся действительно, действительно, действительно, действительно, действительно, очень плохих решений.

MySQL offset work-around, называемый find_in_set():

SELECT i.*
FROM items i JOIN
     items_rel ir
     ON find_in_set(i.id, ir.ids) > 0;

Однако вы должны приложить свои усилия для фиксации модели данных, а не для того, чтобы запрос работал. Википедия - это одно место для начала.

1
задан sachin kumar 19 January 2019 в 07:55
поделиться

2 ответа

Вы на самом деле правы здесь. Оператор multicast действительно возвращает экземпляр ConnectableObservable ( https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/multicast.ts#L54 ). [ 119]

Это просто проблема с типами TypeScript, где pipe() всегда возвращает только Observable: ( https://github.com/ReactiveX/rxjs/blob/master/src/internal/Observable.ts# L301-L311 ).

Об этом сообщалось, и на странице GitHub RxJS есть открытая проблема: https://github.com/ReactiveX/rxjs/issues/2972

Самый простой обходной путь - принудительное решение переопределить возвращенный Observable:

const source4$ = interval(1000).pipe(...) as ConnectableObservable<number>
0
ответ дан martin 19 January 2019 в 07:55
поделиться

Вы могли обойти его, не используя эти pipe() функция для соединения оператора как все, что это делает, вызывает функцию, возвращенную multicast().

, Например: observable.pipe(take(5)) совпадает с take(5)(observable)

единственная проблема, которая этот путь, TypeScript не сможет вывести тип Заметного. Таким образом, необходимо будет указать его при создании Предмета.

let source4$ = multicast(new Subject<number>())(interval(1000).pipe(take(4)));

source4$.subscribe(val => {
    console.log(`Observer 1: ${val}`);
});

setTimeout(function() {
    source4$.subscribe(val => {
        console.log(`Observer 2: ${val}`);
    }); 
}, 1000);
setTimeout(function() {
    source4$.subscribe(val => {
        console.log(`Observer 3: ${val}`);
    }); 
}, 2000);

source4$.connect();
0
ответ дан 10 December 2019 в 02:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: