由于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)))
答案 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