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

How to use redux-observable and promise correctly?

我正在使用 hello.js 登录。

hello('abc').login()returns一个承诺。

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

但是,下面的代码有时不会调度操作 SIGN_IN_SUCCEED

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 的捕获异常时暂停 方式帮助我找到了错误。上面的代码没有问题。导致问题的原因是,首先我尝试在获得 SIGN_IN_SUCCEED 后将令牌保存到商店。然后我在应用程序登录后立即使用令牌来获取内容。因此,当 fetch using token 步骤在 saving token in the store 步骤之前运行时,它会导致也不会调度的问题 SIGN_IN_SUCCEED.

如果我对您的示例中缺少的内容做出一些假设(例如 scope、hello.js 的作用等),它会按预期工作。这是一个例子:https://jsbin.com/rasumo/edit?js,output

很遗憾,您的代码中肯定还有其他问题未包含在此处。您如何确认它没有调度 SIGN_IN_SUCCEED 操作?控制台中是否有任何错误?您是否尝试过在调试器中启用 "Pause on Caught Exceptions" 以查看您是否在某个地方默默地吞下了一个阻止操作到达您的减速器的错误?

另一件需要确认的事情是 hello('msft').login({ scope }) 返回的 Promise 实际上确实解析了。您可以链接一个 .then() 来确认这一点。

希望对您有所帮助!