[英]How to use redux-observable and promise correctly?
我正在使用hello.js登錄。
hello('abc').login()
返回一個promise。
它確實成功登錄,因為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
。
如果我對你的例子中缺少的東西做了一些假設(例如scope
,hello.js做了什么等),它會按預期工作。 這是一個例子: https : //jsbin.com/rasumo/edit?js,output
遺憾的是,您的代碼必定存在其他錯誤,此處未包含此內容。 你是如何確認它沒有調度SIGN_IN_SUCCEED
動作的? 控制台中有錯誤嗎? 您是否嘗試在調試器中啟用“暫停捕獲的異常”以查看您是否可能在某個地方無聲地吞下一個阻止操作到達您的Reducer的錯誤?
要確認的另一件事是hello('msft').login({ scope })
返回的Promise hello('msft').login({ scope })
確實解決了。 您可以鏈接.then()
來確認這一點。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.