Я пытаюсь создать наблюдаемую facebook JSDK, поэтому у меня есть метод, с .create()
d наблюдаемым, что выглядит, например, как этотrxjs5: отложим создание наблюдаемой до другого наблюдаемого излучает определенное значение
getLoginStatus$() {
return Observable.create((observer: Observer<FBResponseObject>) => {
try {
// this._fb is window.FB
this._fb.getLoginStatus((resp: FBResponseObject) => {
if (resp.error) {
observer.error(resp.error);
} else {
observer.next(resp);
observer.complete();
}
}, force);
} catch (error) {
observer.error(error);
}
return function() {};
});
}
проблема заключается в том, что, поскольку facebook sdk загружается асинхронно, он может быть недоступен в момент подписания этого метода. Поэтому у меня есть fbSdkReady$
I next()
до true
после того, как он станет доступен. Теперь вопрос заключается в том, как подключить их, поэтому, когда я подписываюсь на getLoginStatus$
, он сначала ждет fbSdkReady$
, чтобы стать готовым и только затем создает наблюдаемый.
Я попытался с помощью delayWhen(() => fbSdkReady$.filter(r => !!r)
, который прекрасно работает для ожидания fbSdkReady$
быть готовым, но Observable.create
называется immeditealy тем не менее, и, таким образом, ошибки аутов, потому что FB
все еще не готов.
Что я могу сделать, чтобы отложить создание наблюдаемого?
Хорошо, это было намного проще, чем я думал. Я искал сложности там, где их не было. Благодаря! – foxx
@foxx Не беспокойтесь, многие вещи в Rx легки, как только вы знаете точные операторы. Просто продолжайте учиться, и скоро вы тоже узнаете все трюки;) – Dorus