Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api 反应+;Axios:未捕获类型错误:无法读取属性';类型';未定义-->;我的承诺不是';累加_Api_Reactjs_Promise_Axios - Fatal编程技术网

Api 反应+;Axios:未捕获类型错误:无法读取属性';类型';未定义-->;我的承诺不是';累加

Api 反应+;Axios:未捕获类型错误:无法读取属性';类型';未定义-->;我的承诺不是';累加,api,reactjs,promise,axios,Api,Reactjs,Promise,Axios,我正在使用以下命令: “axios”:“^0.15.3” “反应”:“^15.4.2” “react redux”:“^5.0.3” “redux”:“^3.6.0” “redux不可变”:“^3.1.0” 我想从波士顿市的数据门户检索数据。我的目标是,当一个人进入“属性”屏幕时,该组件的ComponentWillMount()将调用同步API调用,以在呈现componeet之前检索数据。请注意,我让所有这些与redux saga同步工作,但正如我上面提到的,用户操作会在数据显示在组件中之前

我正在使用以下命令:

  • “axios”:“^0.15.3”
  • “反应”:“^15.4.2”
  • “react redux”:“^5.0.3”
  • “redux”:“^3.6.0”
  • “redux不可变”:“^3.1.0”
我想从波士顿市的数据门户检索数据。我的目标是,当一个人进入“属性”屏幕时,该组件的ComponentWillMount()将调用同步API调用,以在呈现componeet之前检索数据。请注意,我让所有这些与redux saga同步工作,但正如我上面提到的,用户操作会在数据显示在组件中之前触发数据检索

我的代码出现以下错误:

未捕获的TypeError:无法读取未定义的属性“type”

到目前为止,我所掌握的情况如下:

  • 在my property.js中(我删除了与错误无关的代码):
  • 在我的城市行动中,我有:
  • }

  • 这是我的城市巴士,我有:
  • 在Chrome控制台中,我得到:

    您可以看到错误,然后我立即将正确的数据打印到控制台,但我的减速机没有发生任何事情。感谢所有的帮助。我可以看到我是否注释掉了这行:

    常量请求= axios.get(
    https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\“
    +NewCitySpoid+
    \”

    从动作到减速机,一切都正常工作……所以作为新手,我觉得我使用axios是错误的。我甚至在我的操作中尝试了以下代码,并得到了相同的错误:


    提前谢谢

    您的操作创建者没有返回任何内容,因此将
    未定义的
    发送到您的商店。当您尝试读取减速机中
    未定义
    的属性
    type
    时,会引发错误

    如果您查看动作创建者:

    export function requestCityBosAPI(citybosPID) {
        let newcitybosPID='1000001021';
        // console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
        const request = >   axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + newcitybosPID + `\"`)
          .then(response => {
            console.log(response);
            if (response.status === 200) {
              return {
                type: actionTypes.OK_CITYBOSAPI,
                property2017: response.data,
                createDT: new Date().toUTCString()
           }
         }
       })
    }
    
    然后,唯一的返回语句是传递给
    .Then()
    的匿名函数中的

    Axios作为一个库只能进行同步调用——可以进行同步AJAX调用,但您必须问问自己这是否真的是您想要的?在请求解决之前,您的应用程序将完全没有响应,这通常是一种糟糕的用户体验


    我将使用一个异步调用,如果这意味着有一段短时间您的组件没有数据,那么您可以只呈现一个加载屏幕。您可以使用您喜欢的任何redux副作用库(redux saga、redux thunk等)

    感谢您的回复。我会回到以前的代码,我理解用户体验是关键。。。
    //External Dependencies
    import axios from 'axios';
    
    //Internal Dependencies
    import * as actionTypes from './action_types';
    
    export function requestCityBosAPI(citybosPID) {
        let newcitybosPID='1000001021';
        // console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
        const request = >   axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + newcitybosPID + `\"`)
          .then(response => {
            console.log(response);
            if (response.status === 200) {
              return {
                type: actionTypes.OK_CITYBOSAPI,
                property2017: response.data,
                createDT: new Date().toUTCString()
           }
         }
       })
    
       //External Dependencies
       import Immutable from 'immutable';
    
       //Internal Dependencies
       import * as actionTypes from '../actions/action_types';
    
       const initialState = Immutable.Map({
         property2017: null,
         createDT: null,
         error: null,
         errorDT: null
       });
    
      console.log(initialState);
    
       export default (state = initialState, action) => {
         console.log(action);
         console.log("action.type=[" +action.type +"]");
         if (action.type === actionTypes.OK_CITYBOSAPI) {
            return state.merge({ //returning new states
              property2017: action.property2017,
              createDT: action.createDT
             })
         }
         else if (action.type === actionTypes.FAILED_CITYBOSAPI) {
           console.log('FAILED_CITYBOSAPI ' + new Date().toUTCString());
           return state.merge({ //returning new state
             error: action.error,
             errorDT: action.errorDT
           })
         }
    
         return state; //returns initial state
       }
    
      export function requestCityBosAPI(citybosPID) {
        console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
        axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + citybosPID + `\"`)
          .then(function (response) {
            console.log(response);
            if (response.status === 200) {
              return {
                type: actionTypes.OK_CITYBOSAPI,
                property2017: response.data,
                createDT: new Date().toUTCString()
              }
            }
            else {
              return {
                type: actionTypes.FAILED_CITYBOSAPI,
                error: response.statusText,
                errorDT: new Date().toUTCString()
              }
            }
          })
          .catch(function (error) {
            console.log(error);
    
          });
      }
    
    export function requestCityBosAPI(citybosPID) {
        let newcitybosPID='1000001021';
        // console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
        const request = >   axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + newcitybosPID + `\"`)
          .then(response => {
            console.log(response);
            if (response.status === 200) {
              return {
                type: actionTypes.OK_CITYBOSAPI,
                property2017: response.data,
                createDT: new Date().toUTCString()
           }
         }
       })
    }