2016-06-13 2 views
0

Моя проблема очень проста, но я не мог найти ответ, следуя разному учебнику по RXJS. У меня есть хранилище, в котором у меня есть функция, которая вызывает серверный вызов, эта функция вызывается прямо из моих компонентов во время запуска, а затем по мере необходимости обновления. Я хочу, чтобы эта функция была наблюдаемой, поскольку fromEvent используется для наблюдения за событием KeyBoard или Mouse из HTML-элемента.Сделать поток из вызова функции с помощью RXJS

Как я могу превратить эту функцию в поток, возвращающий обещание для каждого вызова.

this.getData(args) <Promise> 

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

this.getData.flatMap(promise => promise) 
.subscribe(result => this.state.data = result) 
+0

В принципе, вы хотите '.defer'? –

+0

no, defer, похоже, вызывает функцию ASA, на которую вы подписываетесь, мне нужен мой поток для запуска результата, только когда вызывается this.getData(), например, изEvent, когда вы нажимаете или перемещаете мышь, событие запускается, и вы подписаться на него, я хочу, чтобы это поведение при использовании this.getData (args) – Duduche

ответ

1

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

всякий раз, когда вы хотите наблюдать вызов определенной функции, обернуть его вокруг Rx.observable. создайте, как показано ниже:

Rx.Observable.create(obs=>{ 
    this.getRestaurant = (variableString, variables, fragments) => { 
     const query = this.getQuery(variableString, fragments) 
     obs.onNext(graphQLFetcher({query: query, variables: variables})) 
    } 
    }) 
    .flatMap(promise => Rx.Observable.fromPromise(promise)) 
    .subscribe(result => { 
    console.log(result) 
    }); 

Теперь у вас есть хороший поток, основанный на этом вызове service.getRestaurant (args).

+0

Я новичок в Rx, и я провожу пару часов, чтобы понять это в одиночку, но это не помогло мне! Благодаря! –

Смежные вопросы