forEach& Promise.all()不起作用

时间:2017-11-22 12:57:51

标签: adonis.js

我遇到 forEach Promise 的问题...它不适用于 AdonisJS

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

没有登录控制台...

1 个答案:

答案 0 :(得分:0)

我敢打赌Promise.all返回的是一个空列表,否则控制台至少会记录一些内容^^

确保对象是可迭代的对象,以便Promise.all不会抛出异常

我们假设我们使用您的adonis项目根目录中的adonis cli repl对此进行测试,以便您可以测试您的应用模型,并确保您的问题不是来自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 []

您可以在自己的Lucid模型中使用相同的机制

干杯:)