Вызов функции или компонента рендеринга, когда анализ конца сервера - PullRequest
0 голосов
/ 08 июня 2018

У меня есть приложение Django-Rest-React, и я сталкиваюсь с некоторыми ситуациями, связанными с анализом и получением данных назад и вперед.

Сначала пользователю необходимо заполнить форму или выбрать анализ желаний,и нажимает кнопку «Применить», которая запускает функцию selection (), а также отображает новый компонент.

applyClick(){
        selection(); //POST method to back end
        this.handleClick_selection(); //closes current component
        this.handleClick_result(); //opens result component
}

selection() {
    var selected= [this.state.selected_1.value, this.state.selected_2.value]
    var selectedString= JSON.stringify(selected);
    $.ajax({
        type: 'POST',
        url: '/selection/',
        data: selectedString,
        contentType: "application/json",
        dataType: "json",
        success: function(data) {
            console.log("Data sent");   //This has to be deleted in afer development finish
        }.bind(this)
    })
}

Это отправляет некоторые данные в представление выбора, которое запускает алгоритм машинного обучения и возвращает результат обратно вjson:

def Selection_view(request):
    #the connection/request is completed, the success is returned 
    #to ajax before the machine learning method runs

    #runs the machine learning method
    data = Test(
         result=json.dumps(result).replace("'",'\"')
    )
    data.save
return HttpResponse(status=204)

Проблема заключается в том, что, пока алгоритм машинного обучения все еще работает, кнопка «Применить» также открыла компонент, который будет отображать эти данные.Компонент имеет следующие методы монтирования:

componentDidMount(){

    let result_parse = []; //result of the ml algorithm

        $.ajax({
            url: '/test/',
            dataType: 'json',
            cache: false,
            success: function(data) {
                data.map(function(d){
                    result_parse = JSON.parse(d.result), //d.result is the column in the json data that I want to parse
                });
                this.setState({ result: result_parse,); //result is the component state to handle the values
            }.bind(this),
        });

render() {
    return(
        {/* printing the result*/}
    )
}

Когда этот последний компонент загружает и выполняет запрос AJAX, алгоритм машинного обучения все еще выполняется в серверной части, поэтому ответ на запрос пуст илиошибка.Я «решил» это на мгновение, установив таймер для рендеринга компонента, например так:

applyClick(){
        selection(); //POST method to back end
        window.setTimeout(() => {
            this.handleClick_selection(); //closes current component
            this.handleClick_result(); //opens result component
        }, 2000);
}

Потому что так устроен метод POST, и у сервера есть «время», чтобы вернуть json правильные значениядо того, как компонент отображается.Но я знаю, что этот ответ не идеален, есть ли способ сказать, что мой компонент результата должен открывать только json.dump (результат)?

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