Ваша проблема в том, что к тому времени, когда вы позвоните instantiateToElement()
, цикл, использующий i
, завершится, и единственное значение для i
, которое увидит код, будет data.results.length
.
. Вы должны использоватьвызов функции для привязки необходимого значения i
:
const instantiate = (i) => (_ => template.instantiateToElement(data.results[i]));
let p = Promise.resolve<void>();
for (let i = 0; i < data.results.length; i++) {
p = p.then(instantiate(i)).then(res => {
console.log('rendering');
}));
}
p.then(_ => {
console.log('done');
});
Вызов instantiate(i)
происходит во время цикла for
и создает функцию, для которой i
связано в новом замыкании.