无法使用redux-saga从服务器产生json响应

时间:2017-11-26 18:06:04

标签: redux redux-saga

我正在尝试使用堆栈反应redux和redux-saga,并了解所需的最小管道。

我做了一个github repo来重现我得到的错误:

  1. https://github.com/kasra0/react-redux-saga-test.git
  2. 运行应用程序:npm run app
  3. url:http://localhost:3000/
  4. 该应用程序包含一个简单的组合框和一个按钮。 从组合中选择一个值后,单击该按钮将调度一个仅包含一些json数据的操作。 服务器接收正确的请求(基于所选值),但在行json = yield call([res,' json'])。我收到了错误:

    我从浏览器收到的错误消息:

     index.js:2177 uncaught at equipments at equipments 
       at takeEvery 
       at _callee 
     SyntaxError: Unexpected end of input
     at runCallEffect (http://localhost:3000/static/js/bundle.js:59337:19)
     at runEffect (http://localhost:3000/static/js/bundle.js:59259:648)
     at next (http://localhost:3000/static/js/bundle.js:59139:9)
     at currCb (http://localhost:3000/static/js/bundle.js:59212:7)
     at <anonymous>
    

    它来自我的一个传奇:

    import {call,takeEvery,apply,take}  from 'redux-saga/effects'
    import action_types                 from '../redux/actions/action_types'
    
    let process_equipments = function* (...args){
        let {department} = args[0] 
        let fetch_url = `http://localhost:3001/equipments/${department}`
        console.log('fetch url : ',fetch_url)
        let res  =  yield call(fetch,fetch_url, {mode: 'no-cors'})
        let json =  yield call([res, 'json']) 
        // -> this is the line where something wrong happens
    }
    
    export function* equipments(){ 
        yield takeEvery(action_types.EQUIPMENTS,process_equipments)
    }
    

    我在管道上做错了什么,但我无法找到。

    非常感谢你的帮助!

    Kasra

1 个答案:

答案 0 :(得分:1)

这是不使用call方法的另一种方法。

let res  =  yield call(fetch,fetch_url, {mode: 'no-cors'})
let json =  yield res.json();
console.log(json)

另一种方式

const json =  yield call([res, res.json]);