我想知道通用请求saga是否有意义?
这将需要REQUEST
操作,其中包含所有信息,如标头,网址,数据,并将其与自己的标头和基本网址合并。
然后它将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获取函数而是fork
会更好吗?
一旦在响应标头中遇到API,它也可以负责管理API access_token
,并将其保存到所有后续请求中。
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
}
答案 0 :(得分:2)
这里有几个问题。
是。通用请求saga对我有意义。为所有请求提供标准的地方是有道理的。
叉子绝对是必需的。或者更确切地说使用takeEvery
帮助器。这是为了防止在传奇处理fetch
时丢失一些请求。使用race
。
actions
函数中的request
参数比使用startAction
键的数组更好。另一种方法是给请求一个名字。并为每个操作创建通用后缀(例如,GETSTH_START,GETSTH_SUCCESS,GETSTH_ERROR)