Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 如何正确使用redux observable和promise?_Javascript_Reactjs_Redux_React Redux_Redux Observable - Fatal编程技术网

Javascript 如何正确使用redux observable和promise?

Javascript 如何正确使用redux observable和promise?,javascript,reactjs,redux,react-redux,redux-observable,Javascript,Reactjs,Redux,React Redux,Redux Observable,我正在使用登录 hello('abc')。login()返回一个承诺 它确实成功登录,因为hello.js本身将令牌保存在本地存储中 但是,下面的代码有时不发送操作登录\u success export const signInEpic = (action$, store) => action$ .ofType(SIGN_IN) .mergeMap(action => Observable .fromPromise(hello('msf

我正在使用登录

hello('abc')。login()返回一个承诺

它确实成功登录,因为hello.js本身将令牌保存在本地存储中

但是,下面的代码有时不发送操作
登录\u success

export const signInEpic = (action$, store) =>
  action$
    .ofType(SIGN_IN)
    .mergeMap(action =>
      Observable
        .fromPromise(hello('msft').login({ scope }))
        .map(response => ({
            type: SIGN_IN_SUCCEED,
            payload: response.authResponse.access_token
          })
        )
        .catch(error => Observable.of({ type: SIGN_IN_FAILED, payload: error }))
    );
更新:
Jay的暂停捕获异常的方式帮助我找到了错误。上面的代码没有问题。导致问题的原因是,在获得
登录\u成功后,我首先尝试将令牌保存到存储中。然后,一旦应用程序登录,我就立即使用令牌获取内容。因此,当使用令牌获取步骤在将令牌保存到存储步骤之前运行时,它会导致问题,如果我对您的示例中缺少的东西做一些假设(例如
范围
,hello.js做什么,等等),它也不会成功地调度
登录。下面是一个例子:

export const signInEpic = (action$, store) =>
  action$
    .ofType(SIGN_IN)
    .mergeMap(action =>
      Observable
        .fromPromise(hello('msft').login({ scope }))
        .map(response => ({
            type: SIGN_IN_SUCCEED,
            payload: response.authResponse.access_token
          })
        )
        .catch(error => Observable.of({ type: SIGN_IN_FAILED, payload: error }))
    );
不幸的是,您的代码中肯定还有其他错误,这里没有包含。您是如何确认它没有发送
登录\u success
操作的?控制台中是否有任何错误?您是否尝试过在调试器中启用“捕获异常时暂停”,以查看您是否在某个地方默默地吞下了阻止操作到达还原程序的错误

另一件需要确认的事情是,
hello('msft').login({scope})
返回的承诺确实解决了问题。您可以链接一个
。然后()
来确认这一点


希望这有帮助

很高兴在这里见到你,杰!我使用的是redux logger和redux DevTools,它们都没有记录操作
登录\u success
。谢谢你的帮助!我会花更多的时间找出原因。谢谢,杰!!您的
暂停捕获异常的方法帮助我找到了错误。原因是我首先将令牌保存到了商店。然后,一旦应用程序登录,我就立即使用令牌在
componentDidMount
获取一些东西。所以,当取回部分在商店中的保存令牌前面运行时,它导致了问题。@HongboMiao很高兴它起到了作用,您找到了原因!干杯