Promise.all()是执行函数数组还是将它们放入数组时执行?

agm*_*984 5 javascript async-await ecmascript-6 ecmascript-2017

由于await无法在Array.map或内部使用Array.reduce,您可以执行以下操作或将其视为滥用Promise.all吗?通常,neo4j.session()将等待。

// inside a function

const QUERY = 'MATCH (n) RETURN n'
const argsArray = [{ sample: 'sadf' }, { sample: 'sadf' }, { sample: 'sadf' }]

const runQueries = argsArray.map(obj => neo4j.session.run(QUERY, obj.sample))

await Promise.all(runQueries)
      .then(results => results.forEach(result => console.log(result)))
Run Code Online (Sandbox Code Playgroud)

Jon*_*lms 4

Promise.all() 是否执行函数数组?

不,这是一系列的承诺

或者当您将它们放入数组时它们会执行吗?

确切地说,当您构建 Promise 时,它​​们就会被执行。

这会被视为滥用 Promise.all 吗?

不,这完全没问题,这实际上是 Promise.all 的重点。

但是你可以这样做(一个接一个而不是并行执行):

(async function(){

for(const obj of argsArray)
  console.log( await neo4j.session.run(QUERY, obj.sample));

})()
Run Code Online (Sandbox Code Playgroud)