forEach & Promise.all() не работает

У меня проблема с forEach Promise... Это не работает на AdonisJS.

await Promise.all(items.map(async (item) => {
    console.log(item)
}))

Консоль не вошла...

1 ответ

Решение

Могу поспорить, что возвращение Promise.all - пустой список, в противном случае консоль записала бы хоть что-то ^^

Убедитесь, что объект items является итеративным объектом, чтобы Promise.all не выдавал исключение

Допустим, мы проверили это с помощью adonis cli repl внутри корня вашего проекта adonis, чтобы вы могли протестировать свои модели приложений, а также убедиться, что ваша проблема не связана с adonis.

#!/bin/bash
cd <your adonis project root folder>
adonis repl

# stupid test with a fake iterable object
const MAX_ITEMS = 5
const items = []

for (let i = 0; i < MAX_ITEMS; ++i) {
    items.push(i % 2 === 0? i / 2: i * 3 + 1)
}

// let items = []

await Promise.all(items.map(async (item) => { 
    console.log(item)
    return item % 2 === 0 ? item / 2: item * 3 + 1
}))

Теперь консоль вошла бы

0
4
1
10
2

И результат вызова Promise.all дал бы это

[ 0, 2, 4, 5, 1 ]

Если вы используете Promise.all без итерируемого объекта, вы увидите некоторые ошибки (позвольте вам протестировать с использованием adonis repl)

adonis repl

let itemsAsObject = {}
let itemsAsUndefined = undefined
let itemsAsEmptyList = []

async function testPromise(items) {
    return Promise.all(items.map(async (item) => { 
        console.log(item)
        return await item % 2 === 0 ? item / 2: item * 3 + 1
    }))
}

await testPromise(itemsAsObject) // throws an error
await testPromise(itemsAsUndefined) // throws an error
await testPromise(itemsAsEmptyList) // returns []

Вы можете использовать ту же механику с вашими осознанными моделями.

Ура:)

Другие вопросы по тегам