/** * Created by qiucheng on 15/8/27. */ var async = require("async"); var arr = [1, 2, 3]; var transformed = arr.map(function (ele) { return ele * 3; }); console.log(transformed); async.map(arr, function (val, callback) { setTimeout(function () { console.log(val); callback(null, val * 2); }, 10); }, function (err, results) { if (err) { console.log(err); } console.log(results); } ); console.log("end");
上面这段代码中,map和async.map的区别在于,async版本的第二个参数的函数内可以调用异步方法,然后通过callback的方式表示返回值。
也就是说如果第二个参数的函数里没有异步方法的话,map和async版本是一样的。
async.map(arr, function (val, callback) {//该版本和不适用async.map一致 console.log(val); callback(null, val * 2); }, function (err, results) { if (err) { console.log(err); } console.log(results); } );
并且,如果说在某些情况下的确不需要使用异步操作时,也不能在第二个函数中直接调用callback函数,不然可能会引起stack overflow,如下图所示:
asynceachSerieshugeArrayif inCacheitemcallbacknull cacheitem; // if many items are cached, you'll overflowelsedoSomeIOitem callback;//...;
正确做法应该是;
asynceachSerieshugeArrayif inCacheitemasyncsetImmediatecallbacknull cacheitem;;elsedoSomeIOitem callback;//...