Проблема с возвращаемым значением облачной функции AngularFire - PullRequest
0 голосов
/ 30 января 2020

У меня проблема с AngularFire, потому что в их github (Документация) говорится, что он возвращает Observable.

Это новая учетная запись в stackoverflow, поэтому я не могу встроить изображение сюда .

проблема с кодом

но дело в том, что я не могу подписаться на Observable.

Я предполагаю, что он должен что-то делать с

(data: any) => Observable<any>;

, потому что, когда я пытаюсь ввести переменную httpCallReleaseUser в Observable. Я получаю ошибку, которая говорит мне, что у него нет подписки + некоторые другие методы.

теперь с определением типа

, если это проблема

В чем разница между

Observable<any>

и

(data: any) => Observable<any>;

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Эта разница между Observable и () => Observable заключается в том, что последняя является функцией, которая выводит Observable.

AngularFireFunctions с сигнатурой httpsCallable(name:string) => (data:any) => Observable<any>, что означает, что вы должны вызывать ее дважды сначала с названием вашей функции, а затем снова с данными, которые вы хотите передать в функцию.

functions.httpsCallable('fn-name')({ ... your data here or empty })

0 голосов
/ 31 января 2020

Ваше определение неверно. Как указывает @Nelles, вы выполняете функцию, а она не выполняет то, что вы хотите. Вы, вероятно, захотите что-то простое, например: data:Observable<any>;, в котором говорится, что ваша переменная имеет наблюдаемый тип.

Возможно, вам потребуется получить данные в разных форматах, и даже интерфейсы могут быть использованы. Может быть что-то вроде следующего.

export class foo {
    private data:Observable<myInterface[]>;

    constructor(
        @Inject(AngularFireDatabase) protected AfDb: AngularFireDatabase,
    ) { }

    public get():Observable<myInterface[]> // Return an array of myInterface items as an observable. Note that the data in firebase needs to match myInterface, but fields will be supported automatically
    {
        data = this.AfDb.list<myInterface[]>('firebasetable').valueChanges()
        return data;
    }
}
...