Почему мой запрос POST срабатывает только один раз в цикле for? - PullRequest
0 голосов
/ 25 октября 2019

В настоящее время я делаю несколько запросов POST к этому API, на которые есть ссылка: https://youdontneedacrm.com/api#assign-a-lead

У меня есть запрос POST, который создает столько циклов, сколько я хочу, в цикле for, и он прекрасно работает, но сейчас я пытаюсь сделать POST-запросы, чтобы назначить эти созданные приводит к определенному торговому представителю, и он делает только один запрос вместо нескольких. Я не думаю, что API имеет ограничение на количество лидов, которые вы можете назначить одновременно, и POST-запросы довольно похожи друг на друга только с разными параметрами, поэтому я не совсем уверен, что будет причиной такого поведения.

Вот запросы в моем файле server.js

app.get('/assign*', (request, response) => {
    var baseurl = 'https://OURACC.nocrm.io/api/v2/'
    var apikey = 'APIKEY'

    var lead_id = "";
    var user_id = "";

    var pathname = request.url; // retrieves the requested pathname (ie, /crm/path)
    pathname = pathname.split('?');
    pathname = pathname[0].split('/')
    var parameters = request.query.params;
    var path = pathname[2]; // gets request path for the crm
    //console.log(request);

    lead_id = parameters.lead_id
    user_id = parameters.user_id

    var params = {
        user_id: user_id
    }


    if(path === 'leads'){

            console.log("Inside Assigning Unassigned Leads");

            axios.post(baseurl + path + '/' + lead_id + '/assign',
                params
            ,{
                headers: {'X-API-KEY': apikey, content_type: "json", accept: "application/json"} 
            }).then(function(res){
                console.log("Lead Assigned");
            }).catch(function(error){
                console.log("Error: " + error);
            })

    }

})

app.get('/create*', (request, response) => {
    var baseurl = 'https://OURACC.nocrm.io/api/v2/'
    var apikey = 'APIKEY'

    var title = "";
    var description = "";
    var tags = [];
    var pathname = request.url; // retrieves the requested pathname (ie, /crm/path)

    pathname = pathname.split('?');
    pathname = pathname[0].split('/')
    var parameters = request.query.params;

    var path = pathname[2]; // gets request path for the crm

    title = parameters.title
    description = parameters.description
    tags = parameters.tags

    var params = {
        title: title,
        description: description,
        tags: tags
    }


    if(path === 'leads'){

            console.log("Inside Lead Creation");
            axios.post(baseurl + path,
                params
            ,{
                headers: {'X-API-KEY': apikey, content_type: "json", accept: "application/json"} 
            }).then(function(res){
                console.log("Lead Created");
            }).catch(function(error){
                console.log("Error: " + error);
            }) 
    }

})

Вот мой код на стороне клиента

import React from 'react';
import $ from 'jquery';

export default class ProspectAssignment extends React.Component {

    constructor(props) {
        super(props);  
        this.state = {
            SpreadsheetID: "",
            ProspectList: [],
            Prospects: [],
            Tags: [],
            Fields: this.props.fields,
            Users: this.props.users,
            SelectedUser: this.props.users[0].name,
            Unassigned: [],
            Assigned: [],
        };
    }

    componentDidMount(){
        //console.log("IN PRE");
    }

    componentWillMount(){
       // this.GetListOfUsers();
    }


    RenderUsersList(){
        var list = this.state.Users;
        list = JSON.stringify(list);
        list = JSON.parse(list);

        var options = [];

        for(var i = 0; i < list.length; i++){
            options.push(
                <option key={list[i].id} value={list[i].name}>{list[i].name}</option>
            )
        }

        return options
    }

    GetProspectList(){
        var id = this.state.SpreadsheetID;

        $.get('/crm/spreadsheets/' + id).then(response => {
            console.log(response);
            this.SetProspectList(response);
        }).catch(error => {
            console.log("Error: " + error);
        })
    }

    SetProspectList(response){

        var list = response.spreadsheet_rows;
        var tags = response.tags;
        var contentList = list[0].content;


        var prospects = [];

        for(var i = 0; i < list.length; i++){

            var prospect = {
                leadName: "",
                businessName: "",
                custNumber: "",
                corpName: "",
                corpContName: "",
                corpPhone: "",
                corpEmail: "",
                custFirst: "",
                custLast: "",
                street: "",
                city: "",
                state: "",
                zip: "",
                phone: "",
                category: "",
                tags: [],
            }

            var keys = Object.keys(prospect);

            for(var j = 0; j < contentList.length; j++){
                var key = keys[j];
                prospect[key] = list[i].content[j];
            }

            prospect.tags = tags;

            prospects.push(prospect);
        }

        //console.log(prospects);
        this.setState({Prospects: prospects});

    }

    ChangeHandler(e){
        this.setState({SpreadsheetID: e.target.value});
    }

    SelectHandler(e){
        console.log("Selected User: " + e.target.value);
        this.setState({SelectedUser: e.target.value});
    }

    CreateLeads(){
        var prospects = this.state.Prospects;
        var description = "";
        var title = "";
        var tags = [];



        for(var i = 0; i < prospects.length; i++){
            tags = prospects[i].tags;
            title = prospects[i].leadName;
            description = "Business Name: " + prospects[i].businessName + "\n" +
                            "Customer Number: " + prospects[i].custNumber + "\n" +
                            "Corporate Name: " + prospects[i].corpName + "\n" +
                            "Corporate Contact Name: " + prospects[i].corpContName + "\n" +
                            "Corporate Phone: " + prospects[i].corpPhone + "\n" +
                            "Corporate Email: " + prospects[i].corpEmail + "\n" +
                            "Customer First Name: " + prospects[i].custFirst + "\n" +
                            "Customer Last Name: " + prospects[i].custLast + "\n" +
                            "Street: " + prospects[i].street + "\n" +
                            "City: " + prospects[i].city + "\n" +
                            "State: " + prospects[i].state + "\n" +
                            "Zip: " + prospects[i].zip + "\n" +
                            "Phone 1: " + prospects[i].phone + "\n" +
                            "Category: " + prospects[i].category;

            var data = {
                title: title,
                description: description,
                tags: tags,
            }
            console.log(data);
            $.get('/create/leads', {params: data}).then(response => {
                console.log(response);
            }).catch(error => {
                console.log("Error: " + error);
            })
        }

    }

    SetLeadsToStandby(response){

        var createdLeads = response;

        // TODO:  After Leads are assigned to rep, loop through this.state.Assigned and change todo to standby
        for(var i = 0; i < createdLeads.length; i++){
            if(createdLeads[i].created_from == 'api' && createdLeads[i].status == 'todo'){

            }
        }
    }

    GetUnassignedLeads(){
        $.get('/crm/leads/unassigned').then(response => {   // get unassigned leads
            //console.log(response);
            this.setState({ Unassigned: response });
            //this.AssignLeadToRep(response);
        }).catch(error => {
            console.log("Error: " + error);
        })


    }

    AssignLeadsToRep(){

        var users = this.state.Users;
        var userSelected = this.state.SelectedUser;
        var unassignedLeads = this.state.Unassigned;
        var user_id = "";
        var leadsToAssign = [];

        for(var j = 0; j < users.length; j++){
            if(userSelected === users[j].name){ // find user and retrieve their id
                user_id = users[j].id;
            }
        }


        for (var i = 0; i < unassignedLeads.length; i++){
            if(unassignedLeads[i].created_from == 'api' && unassignedLeads[i].status == 'todo'){
                leadsToAssign.push(unassignedLeads[i].id);    
            }
        }

        for(var k = 0; k < leadsToAssign.length; k++){

            var data = {
                user_id: user_id,
                lead_id: leadsToAssign[k]
            }

            $.get('/assign/leads', {params: data}).then(response => {
                console.log(response);
            }).catch(error => {
                console.log(error);
            })
        }

        //this.setState({ Assigned: leadsToAssign });
    }


    render() {
        var divToRender = (
            <div>
                <input type="text" id="SpreadsheetId" onChange={this.ChangeHandler.bind(this)}></input>
                <button onClick={this.GetProspectList.bind(this)}>Get Prospecting List</button>
                <button onClick={this.CreateLeads.bind(this)}>Create Leads</button>
                <button onClick={this.GetUnassignedLeads.bind(this)}>Get Unassigned Leads</button>
                <select onChange={this.SelectHandler.bind(this)} value={this.state.SelectedUser}>
                    {this.RenderUsersList()}
                </select>
                <button onClick={this.AssignLeadsToRep.bind(this)}>Assign Leads</button>
            </div>
        );
    return divToRender;
    }
}

Запрос, который отлично работает, находится в моем CreateLeads() метод. Тот, который не работает правильно, находится в моем методе AssignLeadsToRep (). Я получаю ответ 200 после первого запроса, но после этого он выглядит так, как будто зависает при первом запросе. Спасибо за любую помощь или предложения, спасибо.

[РЕДАКТИРОВАТЬ] Поэтому я заметил, что если я сделаю запрос AssignLeads и подожду около 2 минут, то все они начнут проходить. Когда я захожу на вкладку «Сеть» и смотрю на запросы, я замечаю, что в разделе «Время» написано, что он остановлен во всех запросах. Я также заметил, что в заголовках запросов написано Connection: Keep Alive, не уверен, что это как-то связано с этим, но нашел это интересным.

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