Как ждать ответа fetch / XMLHttpRequest для более длительного времени в веб-интерфейсе? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть один сценарий, я должен сделать запрос xhr / fetch к бэкэнду. Моя база данных в бэкэнде очень большая. Так что ответ на фронтэнд занимает много времени. Но запрос на выборку во внешнем интерфейсе истекает через 2 минуты или около того. Как увеличить время ожидания для запроса fetch / xhr?

Мой код внешнего интерфейса:

$.ajax({
    url: `${fetchUrl()}export-meal/${restaurantID}`,
    type: "POST",
    dataType: "json",
    timeout: 3600000,
    success: function(response) { const json = response
      if(json.status){

        dispatch({type:SUBMIT_MEAL_SUCCESS}) 
      // jsonexport(JSON.parse(json.data),function(err, csv){
      jsonexport(JSON.parse(json.data),function(err, csv){

        if(err) return console.log(err);
        fileDownload(csv, 'meals.csv');
    })
  }else{
    dispatch({type:SUBMIT_MEAL_FAILURE})
  }
    },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
        dispatch({type:SUBMIT_MEAL_FAILURE})
    }
});

Здесь я добавил время ожидания на 1 час. Но выдает ошибку через 1 или 2 минуты

Error: Server returned nothing (no headers, no data)

Когда эта ошибка появляется на веб-интерфейсе. Мой код в бэкэнде работает совершенно нормально и продолжает обрабатывать данные, но это занимает много времени, так как мне приходится обрабатывать около 20000 полей данных.

Ошибка в консоли браузера

POST http://localhost:3003/export-meal/5e5d1231366bdb471a76157a net::ERR_EMPTY_RESPONSE

У меня также есть пробовал с топором ios но он выдает ту же ошибку Мой топор ios код:

await axios({
    method:"POST",
    url:`${fetchUrl()}export-meal/${restaurantID}`            
  })
  .then(response => response.json())
  .then(json => {

    if(json.status){

    dispatch({type:SUBMIT_MEAL_SUCCESS})  
    if(json.count > 0) message.warning(`${json.count} meal/s already exist`)
    dispatch(getMeal())
    }
  }).catch(err => 
    {

    console.log("err",err);
    message.error(err)
  }
    )

А также пробовал с обычным запросом выборки и снова выдает ту же ошибку Мой код запроса выборки:

fetch(`${fetchUrl()}import-meal`,
  {
    method:"POST",

    // body:JSON.stringify({
    //   "meals":mealfiltered,
    //   "restaurantID":restaurantID
    // }),
    body:formData

  })
  .then(response => response.json())
  .then(json => {

    if(json.status){

    dispatch({type:SUBMIT_MEAL_SUCCESS})  
    if(json.count > 0) message.warning(`${json.count} meal/s already exist`)
    dispatch(getMeal())
    }
  }).catch(err => 
    {

    console.log("err",err);
    message.error(err)
  }
    )

Все, что мне нужно сделать, это немного подождать, чтобы мой бэкэнд обработал данные и отправил мне ответ. Мне нужно ждать как минимум 10-15 минут.

...