簡體   English   中英

如何正確使用redux-observable並承諾?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM