2016-03-02 54 views
8

我想知道一般的请求传奇是否有意义?API请求的REDX传奇是否有意义?

这将需要一个REQUEST行动,其中包含标题,网址,数据等所有信息,并将它与自己的标题和基本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函数获取一个fork会更好吗?

传奇还可以负责管理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 
} 

回答

1

这里有几个问题。

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

  • 叉子是绝对需要的。或者使用takeEvery帮手。这是为了防止遗漏处理fetch时丢失一些请求。使用race也可能需要执行默认超时。

  • request中的参数actions函数最好是比具有密钥startAction的数组更好的对象。另一种方法是给请求一个名字。并为每个动作制作通用后缀(例如,GETSTH_START,GETSTH_SUCCESS,GETSTH_ERROR)

相关问题