nodejs异步循环情况处理


APP

零度逍遥

2018-01-12 17:15:55

在写node的时候,时常会遇到异步请求的情况,下面就是一个例子:

需求,要循环从数据库中查询,结果汇总,返回。

因为数据库查询操作是异步的,所以我们如果直接在for循环中进行数据库查询,这样是得不到我们想要的结果的。

在这里推荐一个工具async,这个工具专门帮助node处理各种各样的异步同步问题。

这个例子我使用的方法是async的each方法,代码如下:

async.each([1,2,5], function (item, cb) {
  // 这里可以写一些异步操作
  console.log (item)
  cb(null)
}, function (err) {
  // 这里处理循环结束后的操作
  console.log('循环结束啦')
})

在上面这个例子中,会依次输出1,2,5,'循环结束啦'。

如果你想要在上述循环结束的地方得到每次循环中间的值,可以使用async.map方法。

async.map([1,2,5], function (item, cb) {
  // 这里可以写一些异步操作
  console.log (item)
  cb(null, item+6)
}, function (err, results) {
  // 这里处理循环结束后的操作
  console.log(results)
  console.log('循环结束啦')
})

这样打印的结果就是1,2,5,[7,8,11],'循环结束啦'。

有了这两个方法,我们处理异步循环的情况就轻松多了。