Пакетный большой набор данных JSON в JavaScript и отправка его на сервер

Простым способом,

var a =20; function a(){this.a=10; console.log(a);} 
//20, since the context here is window.

Другой экземпляр:

var a = 20;
function ex(){
this.a = 10;
function inner(){
console.log(this.a); //can you guess the output of this line.
}
inner();
}
var test = new ex();

Ans: Консоль будет печатать 20.

Причина, функция выполняет свой собственный стек, в этом примере функция ex выполняется с оператором new, поэтому будет создан контекст, и когда inner будет выполнен, JS создаст новый стек и выполнит inner, но существует локальный контекст.

Итак, если мы хотим, чтобы функция inner имела локальный контекст, который является ex, нам нужно привязать контекст к внутренней функции .

Стрелки решают эту проблему, вместо того, чтобы принимать Global context, они берут local context, если они существуют. В given example, он примет значение new ex() как this.

Итак, во всех случаях, когда привязка является явной, Arrows решает проблему по умолчанию.

-3
задан Younes Zaidi 16 January 2019 в 09:15
поделиться

1 ответ

На самом деле это довольно просто, если вы планируете использовать async/await. Идея в том, чтобы отправить свой JSON Synchronously.

  1. Разделить полезную нагрузку
  2. Синхронно ожидать, пока ваш сервер не даст ему ответ
  3. Обработать ответ (продолжить отклонение, если произойдет ошибка, это нарушит цикл)
  4. [116 ] Продолжить изменение индекса

Не проверял код, но, более или менее, он должен быть таким.

const x = [{...}] // assuming that x is your array of object

const sendByChunks = async (chunkSize) => {
  return new Promise((resolve, reject) => {
    let start = 0
    let end = 0

    while (start <= x.length) {
      try {
        end = (end + chunkSize) > x.length ? x.length : (end + chunkSize) // set the end index
        const payload = x.slice(start, end) // slice the array
        start = end
        await postBatchData(payload) // send to your API
      } catch (error) {
        reject(`Error postBatchData from ${start} to ${end}`) // log something
      }
      resolve('Success')
    }
  })
}
sendByChunks(100)
  .then(response => { // handle response (your resolve) })
  .catch(error => { // handle error (your reject) })
0
ответ дан whynut 16 January 2019 в 09:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: