Promise.all与AVA测试中的循环

时间:2017-12-18 17:05:06

标签: node.js promise ava

我在内存测试夹具加载器中使用mongo,它在每次测试之前都已准备就绪。通常工作完美无缺。

我有一个函数getSample,它使用AVA进行数据调用。想要用不同的参数(时间戳)多次调用这个我试过这个:

const timestamps = [ '2017-08-14T00:00:00.000Z', '2017-08-13T00:00:00.000Z']

const tasks = timestamps.map(t => getSample(t))
const samples = await Promise.all(tasks)

这以一种有趣的方式失败了。我的第一个调用工作(db结果在那里),所有其他调用返回一个空集 - 没有错误。

将代码更改为此格式有效。所有循环实例都可以找到集合和内容。

let samples = []
for (let t of timestamps) {
  samples.push(await getSample(t))
}

const getSample = async () => {
   const c = await getCollection('foo') // fetches open mongo connection and returns collection
   return c.find().toArray()
}

使用标准的Mongo DB,工作正常。但显然这两个代码的工作方式有所不同,我想了解它是什么。为了清楚起见,我不是在为内存数据库寻找修复 - 更希望了解可能发生的事情。

可能与this SO帖子有关但不确定。

0 个答案:

没有答案