我正在使用hello.js登录。
hello('abc').login()
会返回一个承诺。
它确实已成功登录,因为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 }))
);
更新:
周杰伦的暂停被捕异常方式帮我找到了错误。上面的代码没有问题。导致问题的原因是,首先我尝试在获取SIGN_IN_SUCCEED
后将令牌保存到商店。然后我会在应用登录后立即使用令牌来获取内容。因此,当使用令牌获取步骤在在商店中保存令牌步骤之前运行时,会导致问题也不会发送SIGN_IN_SUCCEED
。
答案 0 :(得分:2)
如果我对你的例子中缺少的东西做了一些假设(例如scope
,hello.js做了什么等等)它按预期工作。这是一个例子:https://jsbin.com/rasumo/edit?js,output
遗憾的是,您的代码必定存在其他问题。你是如何确认它没有发送SIGN_IN_SUCCEED
行动的?控制台中有错误吗?您是否尝试在调试器中启用“暂停捕获的异常”以查看您是否可能在某个地方无声地吞下错误,阻止操作到达您的Reducer?
要确认的另一件事是hello('msft').login({ scope })
返回的Promise确实解决了。您可以链接.then()
来确认这一点。
希望这有帮助!