node下forEach实现异步
因为forEach是一个异步方法，在我实践中发现，比如我要遍历一个数组，但是数组里面读取每一项都有异步操作，比如读写文件存数据库，所以我们需要每异步遍历而非同步遍历

# 使用async库

安装`async`模块
```js
npm install async
```
注意`callback(null)`固定放在异步函数里面，这里会把所有异步操作执行完之后再执行回调函数输出`console.log('done');`
```js
const async = require('async');
async.each(
    ['file1', 'file2', 'file3'],
    (item, callback) => {
        setTimeout(
            () => {
                console.log('item:', item);
                callback(null);
            },
            1000
        );
    },
    () => {
        console.log('done');
    }
);
```

# 使用promise

```js
var arry = [...];
Promise.all(arry.map(function(elem){
  return new Promise(function(resolve, reject){
    ...
    resolve(result);
  })

})).then(function(data){
  //在这就可以等所有的返回结果可以得到
})
```

# 参考文章 
- [node.js在遇到“循环+异步”时的注意事项](http://blog.csdn.net/fangjian1204/article/details/50585073)
- [forEach()里面使用异步函数，那如何等所有的异步函数都执行完再 进行下一步](https://segmentfault.com/q/1010000008574404)
- [node.js里的forEach()也是异步的吗？](https://www.cnblogs.com/ImYZF/p/4257389.html)