首页 > 解决方案 > Redux saga yield call不等待firebase?

问题描述

我创建了一个 saga 来更新用户信息。但 yield console.log('waiting');不要等待我的 Fibase 更新完成

export function* handleUpdateUserInfo(action) {
  yield put(updateUserInfoPending());
  const { userInfo, userID } = action;
  const currentUser = yield select(state => state.user.currentUser);
  const newUser = {
    ...currentUser,
    ...userInfo
  };

  try {
    yield call(() => updateUserProfile(newUser, userID));
    yield console.log('waiting');
  } catch (error) {
    yield put(updateUserInfoFailure(error));
  }
}

火力基地

export const updateUserProfile = (newUser, userID) => {
  try {
    firestore
      .collection('users')
      .doc(userID)
      .set(newUser);
  } catch (error) {
    throw error;
  }
};

我想问一下怎么修?以及为什么会发生

标签: reactjsfirebaseredux-saga

解决方案


如果您从 中返回调用updateUserProfile,则可以在调用者中等待其结果。

export const updateUserProfile = async (newUser, userID) => {
  return firestore
      .collection('users')
      .doc(userID)
      .set(newUser);
};

然后你调用它:

yield call(() => await updateUserProfile(newUser, userID));
yield console.log('waiting');

推荐阅读