2017-06-12 79 views
0

我需要向我的API端点发送上传文件的请求。我在我的项目中使用axios,但它看起来像是一个附加文件的问题,而Superagent应该很简单。但是,我的Saga代码不能与Superagent一起工作(没有响应对象,API没有被触发)我做错了什么?Redux-Saga和Superagent

import { delay } from 'redux-saga'; 
 
import { select, call, put } from 'redux-saga/effects'; 
 
import request from 'superagent' 
 
import * as action from '../../constants/actions/'; 
 
import config from '../../constants/config'; 
 
import { getFile, selectEntity, selectPreview } from '../../selectors'; 
 

 
export default function* putUserpic() { 
 
    const file = yield select(getFile) 
 
    const API = process.env.API_URL || config.API_URL; 
 

 
    const entity = yield select(selectEntity); 
 
    const requestURL = `${API}/${entity}/userpic`; 
 
    const token = localStorage.getItem(config.TOKEN); 
 

 

 

 
    var req = request.post(requestURL) 
 
    .attach(file.name, file) 
 
    .set('authorization', token); 
 

 

 
    try { 
 
     yield put({type: action.REQ_PENDING}); 
 
     const response = yield call(req.end) 
 
     yield put({type: action.RES_RECEIVED}) 
 
     yield put({type: action.MESSAGE, payload: response.data.message}); 
 

 
    } catch (e) { 
 
     yield put({type: action.RES_RECEIVED}) 
 
     yield put({type: action.AUTH_ERROR, payload: e.response.data.error}); 
 
     yield delay(config.MSG_DELAY); 
 
     yield put({type: action.RESET_ERROR}) 
 
    } finally { 
 
     yield delay(config.MSG_DELAY); 
 
     yield put({type: action.RESET_MESSAGE}) 
 
    } 
 
}

回答

0

您需要使用反应传奇call - 效应调用一些返回一个承诺。在你的情况下,你要求它运行的最终功能,当你不想使用promise时,这个功能打算与回调一起使用。如果您从您的电话线结束时,你应该看到被提出的要求和应该得到的回应:

const response = yield call(req) 

在这里你可以找到更多有关如何使用承诺在SuperAgent的工作: http://visionmedia.github.io/superagent/#promise-and-generator-support

相关问题