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

时间:2017-10-25 20:34:26

标签: javascript ecmascript-6 async-await ecmascript-2017

由于awaitArray.mapArray.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)))

2 个答案:

答案 0 :(得分:4)

  

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

没有一系列承诺

  

或者当你把它们放入阵列时它们会执行吗?

确切地说,当你构建Promise时,他们会被执行。

  

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

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

但是你可能会(一个接一个而不是并行执行):

  ngOnInit() {
    this.hero$ = this.route.paramMap
      .switchMap((params: ParamMap) =>
        this.service.getHero(params.get('id')));
  }

答案 1 :(得分:1)

String应该是顺序承诺链的语法糖。考虑到数据库查询应该同时运行,在这种情况下使用async.await是完全正确的。

await Promise.all(...)接受一组promises(更具体地说,是一个可迭代的),并且promises在创建它们时开始执行。可能是Promise.all致电之前的那一刻:

Promise.all

或者可能不是。如果一个iterable不是一个数组而是一个生成器,那么在const promises = [Promise.resolve(1), Promise.resolve(2)]; // promises have been created at this point Promise.all(promises).then(...) 调用期间将会延迟创建promises:

Promise.all