9

我想知道通用请求传奇是否有意义?

它将采取REQUEST包含所有信息(如标头、url、数据)的操作,并将其与自己的标头和基本 URL 合并。然后它将fetch请求,然后put(REQUEST_SUCCEEDED, json)在存储中使用 json 有效负载。

const request = yield take(REQUEST)
const { url, data, headers } = request
try {
  if (request.startAction) {
    yield put(request.startAction)
  }
  const json = yield call(api.fetch, url, data, headers)
  yield put({...request.successAction, json})
} catch (error) {
  yield put({...request.errorAction, error})
}

据我了解,这一次只允许一个请求,所以与其调用 API fetch 函数,afork会更好吗?

saga 还可以access_token在响应标头中遇到 API 时负责管理 API,并将其保存以供所有后续请求使用。

function getAction(action) {
  if (action) {
    if (typeof action === "string") {
      return { type: action }
    } else {
      return action
    }
  }
}

export function request(url, data, headers, actions) {
  let result = { 
    type: REQUEST,
    url, data, headers
  }
  actions[0] && result.startAction = getAction(actions[0])
  actions[1] && result.successAction = getAction(actions[1])
  actions[2] && result.errorAction = getAction(actions[2])
  return result
}
4

1 回答 1

3

这里有几个问题。

  • 是的。通用请求传奇对我来说很有意义。为所有请求提供标准的地方是有意义的。

  • 绝对需要叉子。或者更确切地说使用takeEvery助手。这是为了防止在处理 saga 时丢失一些请求fetch。可能还需要使用 实现默认超时race

  • 函数中的actions参数request最好是对象而不是带有键的数组startAction。另一种方法是为请求命名。并为每个动作制作通用后缀(例如,GETSTH_START、GETSTH_SUCCESS、GETSTH_ERROR)

于 2016-06-10T07:10:45.957 回答