У меня есть цикл for, в котором я перебираю массив объектов. На каждой итерации я добавляю HTML-элементы в строку. Затем я записываю строку на страницу как HTML, когда цикл завершается. ...

2
user44109 5 Апр 2021 в 21:58

1 ответ

Лучший ответ

Рассмотрите возможность создания локальной переменной внутри каждой итерации, на которую может ссылаться .then:

for (const item of myObject.elements) {
    const li = $('<li />').appendTo('body');
    getInfoFromDatabase(item.dbID)
        .then((result) => {
            li.data("databaseDetails", result);
        })
        // .catch(handleErrors);
}

Заметка

  • Ваш текущий код (и код выше) добавляется к <body>. Вы, вероятно, захотите вместо этого добавить к <ul> или <ol>.
  • Вам не нужно JSON.parse полезную нагрузку, а затем JSON.stringify ее при настройке данных - эти процессы нейтрализуют друг друга.
  • Строка, переданная в качестве первого аргумента функции .data, не требует префикса data- (это не атрибут данных, он сохраняется во внутреннем устройстве jQuery). Также, вероятно, было бы неплохо поместить сохраненное свойство camelCase для удобства чтения.
  • Не игнорируйте ошибки - добавьте .catch, если возможно.
  • Возможно, вы захотите заполнить <li> сразу, а не один за другим, когда будет возвращаться каждый ответ. Если вы этого хотите, используйте вместо этого Promise.all, чтобы дождаться завершения всех ответов, прежде чем вставлять <li>.
0
CertainPerformance 5 Апр 2021 в 19:04