Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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
Javascript rxjs处理ajax请求_Javascript_Rxjs_Redux Observable - Fatal编程技术网

Javascript rxjs处理ajax请求

Javascript rxjs处理ajax请求,javascript,rxjs,redux-observable,Javascript,Rxjs,Redux Observable,我正在尝试应用此处发布的ajax方法: 尝试此方法时,我收到以下消息: TypeError:对象(…)(…)。管道不是函数 所以管道似乎不存在。(它涉及ajax调用后的第二个管道)。 我该如何解决这个问题 我安装了以下依赖项: "rxjs": "^6.5.2", "rxjs-compat": "^6.5.2", 编辑: 我将代码更改为ajax。获取和调用代码: export const fetchTrendingEpic = action$ => action$.pipe( of

我正在尝试应用此处发布的ajax方法:

尝试此方法时,我收到以下消息:

TypeError:对象(…)(…)。管道不是函数

所以管道似乎不存在。(它涉及ajax调用后的第二个管道)。
我该如何解决这个问题

我安装了以下依赖项:

"rxjs": "^6.5.2",
"rxjs-compat": "^6.5.2",
编辑:

我将代码更改为ajax。获取和调用代码:

export const fetchTrendingEpic = action$ => action$.pipe(
    ofType(FETCH_TRENDING_REQUEST),
    mergeMap(async(action) => {
        const res = await fetchPostStats(action.payload);
        console.log(res);
        res.pipe(
          map(response => {
            console.log('response', response);
            setTrendingPlaces({trendingPlaces: response});
          })
        )
    })
);
res正确打印(显示可观察到),但现在我得到一个错误:

TypeError:无法读取未定义的属性“type”

以下是我在dev中创建店铺的方式:

const createEnhancer = (epicMiddleware) => {
  const middleware = [ epicMiddleware, createLogger() ];

  let enhancer;
  if (getEnvironment() === 'development') {
    enhancer = composeWithDevTools(
      applyMiddleware(...middleware),
      // other store enhancers if any
    );

  };

export default (initialState) => {
  const epicMiddleware = createEpicMiddleware();
  const enhancer = createEnhancer(epicMiddleware);
  const store = createStore(rootReducer, initialState, enhancer);
  epicMiddleware.run(rootEpic);
  return store;
}
编辑注:

这是在NodeJS(SSR)中执行的代码。
我正在努力解决这个问题,我真的不明白为什么要在没有错误的情况下工作会如此困难。

ajax.getJSON
返回一个承诺,而不是一个可观察的承诺时,我不太明白示例代码将如何工作

调用ajax请求的我的服务被标记为async,因为之前的实现在重构之前使用了Axios。
这就是为什么我的控制台将承诺记录为函数的返回值的原因。
删除
async
将按预期返回可观察的值

正如@Dez在评论中提到的,还需要添加返回值。
最后但并非最不重要的一点是,rxjs ajax在NodeJS环境中不起作用。
因此,基于此线程:


我发现有人创建了下面的npm软件包,我将很快试用:

Axios在nodejs中与rxjs配合使用效果很好,只是做了一些类似的事情

const { from } = require('rxjs');
const { map } = require('rxjs/operators');
const axios = require('axios');

const responsePromise = axios.get('https://jsonplaceholder.typicode.com/todos/1');
const response$ = from(responsePromise);

response$
    .pipe(
        map(response => ({ type: 'RESPONSE_RECEIVED', payload: response.data}))
    )
    .subscribe(console.log);

合并映射及其内部的映射需要返回值;可观察到的动作和一个动作。另外,fetchPostStats在做什么?想知道为什么需要async。@dez该服务执行一个rxjs ajax请求,并记录一个承诺,返回值为Observable。因此,我不理解管道是如何存在的(抛出的错误),以及为什么我将其设置为异步的。我想应该有一个不同的解释…我肯定是的;-)在决定redux observable并选择通用方法之前,我编写了我的服务
const { from } = require('rxjs');
const { map } = require('rxjs/operators');
const axios = require('axios');

const responsePromise = axios.get('https://jsonplaceholder.typicode.com/todos/1');
const response$ = from(responsePromise);

response$
    .pipe(
        map(response => ({ type: 'RESPONSE_RECEIVED', payload: response.data}))
    )
    .subscribe(console.log);