Javascript 意外承诺。所有具有嵌套映射承诺的

Javascript 意外承诺。所有具有嵌套映射承诺的,javascript,ecmascript-6,es6-promise,Javascript,Ecmascript 6,Es6 Promise,我需要使用array.map在3秒后显示一些数组消息。以下是阵列: const messages = [ 'hello', 'world', 'have', 'some', 'code' ] 为了在映射中等待,我创建了一个等待函数 const wait = new Promise((resolve, reject) => { setTimeout(() => { resolve(true) }, 3000) }) 然后,我有一个应用程序方法

我需要使用array.map在3秒后显示一些数组消息。以下是阵列:

const messages = [
    'hello', 'world', 'have', 'some', 'code'
]
为了在映射中等待,我创建了一个等待函数

const wait = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(true)
    }, 3000)
})
然后,我有一个应用程序方法,我已经履行了承诺。所有这些

const app = async () => {
    await Promise.all(messages.map(async msg => {
        await wait
        document.querySelector('#app').innerHTML += msg + ', '
    }))
}

app()
预期的输出将是在消息数组上映射的每次迭代中等待3秒,但它将在3秒后立即输出所有消息

代码笔:

这里我遗漏了什么?

承诺。所有承诺都可以用来传递一个承诺列表,所有承诺都可以并行等待

您共享的代码每次迭代都会等待3秒钟,但所有这些迭代都是同时发生的

如果您不想并行执行所有操作,而只是一次处理一个,您可以将其重写为一个简单的循环:

const app = async () => {
  for (const msg of messages) {
    await wait();
    document.querySelector('#app').innerHTML += msg + ', '
  }
}

一旦3秒钟过去,等待就解决了。。。等待它将立即完成。您可能希望函数每次都返回一个新的承诺。听起来您希望的是序列行为?Promise.all适合在一组异步工作完成后执行某些操作,但在这里听起来不太合适。@StealthThennina是的,我希望有一个序列behavior@Gerrit0wait now每次都应该返回一个函数,但工作方式相同。这是下列文件的副本吗