javascript - Sagas 和获取 promise

标签 javascript reactjs redux react-redux redux-saga

由于这个 API 请求,我在这里的最后几分钟一直在用头敲 table ......

我有以下代码:

传奇:

export function * registerFlow () {
  while (true) {
    const request = yield take(authTypes.SIGNUP_REQUEST)
    console.log('authSaga request', request)
    let response = yield call(authApi.register, request.payload)
    console.log('authSaga response', response)
    if (response.error) {
      return yield put({ type: authTypes.SIGNUP_FAILURE, response })
    }

    yield put({ type: authTypes.SIGNUP_SUCCESS, response })
  }
}

API 请求:

// Inject fetch polyfill if fetch is unsuported
if (!window.fetch) { const fetch = require('whatwg-fetch') }

const authApi = {
  register (userData) {
    fetch(`http://localhost/api/auth/local/register`, {
      method  : 'POST',
      headers : {
        'Accept'        : 'application/json',
        'Content-Type'  : 'application/json'
      },
      body    : JSON.stringify({
        name      : userData.name,
        email     : userData.email,
        password  : userData.password
      })
    })
    .then(statusHelper)
    .then(response => response.json())
    .catch(error => error)
    .then(data => data)
  }
}

function statusHelper (response) {
  if (response.status >= 200 && response.status < 300) {
    return Promise.resolve(response)
  } else {
    return Promise.reject(new Error(response.statusText))
  }
}

export default authApi

API 请求确实返回了一个有效的对象,但是 Saga 调用的返回始终是未定义的。谁能指导我错在哪里?

提前致谢!

最好的问候,

布鲁诺

最佳答案

您忘记了从您的函数中返回 promise。做到这一点

const authApi = {
  register (userData) {
    return fetch(`http://localhost/api/auth/local/register`, {
//  ^^^^^^
      method  : 'POST',
      headers : {
        'Accept'        : 'application/json',
        'Content-Type'  : 'application/json'
      },
      body    : JSON.stringify({
        name      : userData.name,
        email     : userData.email,
        password  : userData.password
      })
    })
    .then(statusHelper)
    .then(response => response.json());
  }
};

关于javascript - Sagas 和获取 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782272/

相关文章:

javascript - 在for循环中生成html

javascript - 如何使用 jquery 自动完成不同的值

javascript - 关闭时恢复幻灯片切换按钮文本

reactjs - 绑定(bind)到在 ComponentDidMount 中调用 setState 的事件处理程序会产生警告

reactjs - 使用 redux mixReducers 减少整个子树

javascript - 刷新后 React-Redux 状态丢失

javascript - 将 JQuery 模态对话框动态调整为 IFrame 内容

ios - React native 全新安装 ReferenceError : Unknown plugin "transform-runtime" specified

dynamic - react : creating and referencing dynamic component refs

javascript - React-Native Redux 嵌套数组缩减器