Простым способом,
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 решает проблему по умолчанию.
На самом деле это довольно просто, если вы планируете использовать async/await
. Идея в том, чтобы отправить свой JSON Synchronously
.
Не проверял код, но, более или менее, он должен быть таким.
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) })