Объем обещания отличается во время исполнения - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь подождать (Promise.all) для массива Обещаний , которые выполняют запросы к базе данных, используя Sequelize.js , который разрешает изthen.

Я выполняю свои обещания следующим образом:

for (furnix in shorthandFurni) {

    furniData = shorthandFurni[furnix]
    furniSplit = furniData.split(":")    

    CompletedPromises.push(new Promise(resolve, reject) => {
        db.query("...").then(result => {
            . . .

            // depending on the for-loop
            resolve({
              otherdbdata: . . .,
              furniData: furniData,
              furniSplit: furniSplit
            })
        })
    })
}

Затем возвращаюсь (после цикла for).

return Promise.all(CompletionPromises)

Это все здорово ивсе, но проблема заключается в том, что переменные furniData и furniSplit являются частью разрешения моих обещаний ... Сейчас, когда этот код выполняется на моем сервере, он возвращает переменную furniSplit, одинаковую для всехразрешения обещаний.

По сути, мне интересно, как я могу ввести furniSplit в качестве переменной в область действия функции разрешения, чтобы на каждой итерации цикла forдает уникальные данные вместо последних.

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

На первый взгляд кажется, что это проблема с ограничениями. Попробуйте

const furniSplit = furniData.split(":");
0 голосов
/ 23 апреля 2019

Вы можете использовать функцию, чтобы получить новое значение данных, но они не равны, потому что ссылка отличается.

   for (furnix in shorthandFurni) {

    const furniData = () => shorthandFurni[furnix]
    const furniSplit = () => furniData.split(":")    

    CompletedPromises.push(new Promise(resolve, reject) => {
        db.query("...").then(result => {
            . . .

            // depending on the for-loop
            resolve({
              otherdbdata: . . .,
              furniData: furniData(),
              furniSplit: furniSplit()
            })
        })
    })
}
...