Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 提供的可观测误差“redux”;假;预计会有溪流的地方_Reactjs_React Native_Rxjs_Observable_Redux Observable - Fatal编程技术网

Reactjs 提供的可观测误差“redux”;假;预计会有溪流的地方

Reactjs 提供的可观测误差“redux”;假;预计会有溪流的地方,reactjs,react-native,rxjs,observable,redux-observable,Reactjs,React Native,Rxjs,Observable,Redux Observable,我有这样的文件epic(redux observable): export const intervalChartEpic = (action$, store) => action$.ofType(FETCHING_CHART_DATA_ONE_DAY_SUCCESS) .filter(() => (store.getState().currentPeriod === PERIOD_ONE_DAY)) .mergeMap(() => Observable .

我有这样的文件epic(redux observable):

export const intervalChartEpic = (action$, store) => 
 action$.ofType(FETCHING_CHART_DATA_ONE_DAY_SUCCESS)
  .filter(() => (store.getState().currentPeriod === PERIOD_ONE_DAY))
  .mergeMap(() => Observable
    .interval(10000)
    .takeUntil(store.getState().currentPeriod !== PERIOD_ONE_DAY)
    .switchMap(() => ajax.getJSON(updateChartOneDayUrl(store))
     .map(response => fetchIntervalChartDataSuccess(response))
     .catch((err) => {
       console.log('============Position 1============');
       console.log(err);
       return Observable.of(fetchChartDataFailure(err));
     })
    )
    .catch((err) => {
      console.log('============Position 2============');
      console.log(err);
      return Observable.of(fetchChartDataFailure(err));
    });
  );
它产生了一个错误

"You provided 'false' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable."

位置2处出错,这意味着它在
switchMap()
Function处出错,我不知道为什么,这里有人能帮我吗??,非常感谢

问题实际上不是您的
开关映射的问题,而是您的
takeUntil

.takeUntil(store.getState().currentPeriod !== PERIOD_ONE_DAY)
您正在将一个布尔值作为参数传递给
takeUntil

公共接收(通知者:可观察):可观察

虽然有相当复杂的方法获取流,直到存储的状态更改为特定值,但在实践中,我发现它们是反模式的。相反,倾听动作的声音,该动作描述了改变该状态的意图,无论该动作是什么

.takeUntil(
  action$
    .ofType(CHANGE_PERIOD)
    .filter(action => action.currentPeriod !== PERIOD_ONE_DAY)
)

如果你真的想得到一个状态流,一种方法是创建它并将它注入到你所有的史诗中。这需要最新版本的redux observable

要注入依赖项,可以使用createEpicMiddleware的
依赖项
配置选项

你可以这样使用它:

.takeUntil(
  state$.filter(state => state.currentPeriod !== PERIOD_ONE_DAY)
)

目前还不清楚哪种方法更“正确”。状态流当然更容易,但我有一些耦合和时间方面的顾虑,这使我无法将其实际包含在redux observable中。我也最担心的是它会成为一把猎枪——让做坏事变得如此容易。

问题实际上并不在于你的
开关映射,而是你的
直到

.takeUntil(store.getState().currentPeriod !== PERIOD_ONE_DAY)
您正在将一个布尔值作为参数传递给
takeUntil

公共接收(通知者:可观察):可观察

虽然有相当复杂的方法获取流,直到存储的状态更改为特定值,但在实践中,我发现它们是反模式的。相反,倾听动作的声音,该动作描述了改变该状态的意图,无论该动作是什么

.takeUntil(
  action$
    .ofType(CHANGE_PERIOD)
    .filter(action => action.currentPeriod !== PERIOD_ONE_DAY)
)

如果你真的想得到一个状态流,一种方法是创建它并将它注入到你所有的史诗中。这需要最新版本的redux observable

要注入依赖项,可以使用createEpicMiddleware的
依赖项
配置选项

你可以这样使用它:

.takeUntil(
  state$.filter(state => state.currentPeriod !== PERIOD_ONE_DAY)
)
目前还不清楚哪种方法更“正确”。状态流当然更容易,但我有一些耦合和时间方面的顾虑,这使我无法将其实际包含在redux observable中。我也最担心的是它会成为一把猎枪——让做坏事变得如此容易