Как решить проблему TypeError: Невозможно прочитать свойство 'then' из undefined? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть приложение activjs, которое должно возвращать данные из WepAPI.Диспетчерская функция, которую я вызываю для функции, кажется, выдаёт мне эту ошибку: TypeError: Невозможно прочитать свойство 'then' с неопределенным значением

Я использовал другие функции при диспетчеризации, и она работала нормально, но эта по-прежнему выпирает.

Предполагаемый результат - данные возвращаются к первоначальной отправке.В данный момент данные поступают, но застревают при возврате к первоначальному вызову.

import React from 'react';
import { connect } from 'react-redux';
import { jobActions } from '../../actions/job.actions';
import Popup from 'reactjs-popup'
import JwPagination from 'jw-react-pagination';


class LoadTable extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            data: [],
            pagination: [],
            Search: "Search",            
            sort: {
                column: null,
                direction: 'desc',
            },
        }
        this.clearSearch = this.clearSearch.bind(this);
        this.doSearch = this.doSearch.bind(this);
        this.doSort = this.doSort.bind(this);
        this.runLog = this.runLog.bind(this);
        this.openRunLog = this.openRunLog.bind(this);
        this.onChangePage = this.onChangePage.bind(this);
    }
    componentDidMount() {
        this.props.getJobs() 
            .then((res) => {
                this.setState({
                    data: res.results.response || []
                })
            });

    }
    clearSearch() {
        this.props.getJobs()
            .then((res) => {
                this.setState({
                    data: res.results.response || [], Search: "Search",                    
                    sort: {
                        column: null,
                        direction: 'desc',
                    }
                })
            });
    }
    doSearch(e) {
        const { name, value } = e.target;        
        this.setState({ [name]: value });        

        this.props.doSearch(value)<----Initial Call
            .then((res) => {                
                this.setState({
                    data: res.results.response || [],
                    sort: {
                        column: null,
                        direction: 'desc',
                    }                    
                })
            });
    }
   render() {
         return  (
use data
)}
const mapDispatchToProps = dispatch => ({    
    getJobs: () => dispatch(jobActions.getJobs()),
    doSearch(value) {
        dispatch(jobActions.doSearch(value));<----dispatch
    },

});
export default connect(mapStateToProps, mapDispatchToProps)(LoadTable); 
==========================================
Action being called:
function doSearch(value) {     
    return (dispatch) => {
        dispatch({ type: jobConstants.JOB_REQUEST });
        return jobService.doSearch(value)
            .then(
            results => {

                    dispatch({ type: jobConstants.JOB_SUCCESS, user });

                     //Ran console logs and seen the results here

                    return { results };
                },
                error => {
                    dispatch({ type: jobConstants.JOB_FAILURE, error });                    
                }
            );
    }
}
=========================
Services

function doSearch(SearchValue) {

    const requestOptions = {
        method: 'POST',
        headers: new Headers({
            'Content-Type': 'application/json; charset=utf-8'
        }),
        body: JSON.stringify({SearchValue})
    };

    const requestPath = 'http://localhost:53986/api/jobs/postsearch';    
    return fetch(requestPath, requestOptions)
        .then(handleResponseToJson)
        .then(response => {  
            if (response) {
                return { response };
            }           
        }).catch(function (error) {            
            return Promise.reject(error);
        });
}

1 Ответ

0 голосов
/ 07 мая 2019

Вам нужна асинхронная функция для вашего сервиса, которая возвращает обещание. Как это

async function doSearch(val) {

const requestOptions = {
    method: 'POST',
    headers: new Headers({
        'Content-Type': 'application/json; charset=utf-8'
    }),
    body: JSON.stringify({SearchValue})
};

const requestPath = 'http://localhost:53986/api/jobs/postsearch';    
const data = fetch(requestPath, requestOptions);
const jsonData = await data.json();

return jsonData;
}

Тогда вы можете позвонить так:

doSearch(val).then() // and so on...

Это шаблон, который вы ищете в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...