鍍金池/ 問答/HTML/ dva yield put 是異步的嗎?yield call 是同步的嗎?

dva yield put 是異步的嗎?yield call 是同步的嗎?

我遇到了一個先setItem還是先getItem的BUG。
如果這樣寫
圖片描述

我感覺這幾個yield put是異步的。有時候yield put app/query 還沒執(zhí)行完,直接跳轉 yield put(routerRedux.push(from))了導致我的程序先get到null,后set。

后來我把跳轉寫到'app/query'的最后一行了,它就永遠是先setItem 然后 subscription里面的getItem

 subscriptions: {
    setupWs({ dispatch, history }) {
      history.listen(({ pathname }) => {
      let userId = localStorage.getItem('stompUserId');
          });
        }
      }); 

effects: {
    * query({
    localStorage.setItem('stompUserId', id);
    if (from && from !== '/login') {
          yield put(routerRedux.push(from))
        } else if (locationPathname === '/login') {
          yield put(routerRedux.push('/dashboard'))
        }
        })
        }
回答
編輯回答
淡墨
2017年8月8日 16:35