代码之家  ›  专栏  ›  技术社区  ›  agm1984

确实有希望。all()执行一个函数数组,还是在将它们放入数组时执行?

  •  6
  • agm1984  · 技术社区  · 7 年前

    自从 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)))
    
    2 回复  |  直到 7 年前
        1
  •  4
  •   Jonas Wilms    7 年前

    确实有希望。all()执行一系列函数?

    不,这是一系列的承诺

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

    没错,当你做出承诺的时候,他们就会被执行。

    这是否会被视为滥用承诺。全部的

    不,这很好,这实际上是承诺的重点。全部的

    但是,您可能会这样做(一个接一个,而不是并行执行):

    (async function(){
    
    for(const obj of argsArray)
      console.log( await neo4j.session.run(QUERY, obj.sample));
    
    })()
    
        2
  •  3
  •   skylize Pavel Minaev    7 年前

    async.await 应该是序列承诺链的语法糖。考虑到数据库查询应该并发运行,使用 await Promise.all(...) 在这种情况下。

    Promise.all 接受一系列承诺(更具体地说,是一个iterable),承诺在创建时就开始执行。可能是在 许诺全部的

    const promises = [Promise.resolve(1), Promise.resolve(2)];
    // promises have been created at this point
    Promise.all(promises).then(...)
    

    也可能不是。如果iterable不是数组而是生成器,那么承诺将在 许诺全部的 呼叫:

    const promiseGen = (function* () {
      yield Promise.resolve(1);
      yield Promise.resolve(2);
    })();
    // promises have not been created yet at this point
    Promise.all(promiseGen).then(...)
    // promises have been created