# Async.js
Async is a utility module which provides straight-forward, powerful functions
for working with asynchronous JavaScript. Although originally designed for
use with [node.js](http://nodejs.org), it can also be used directly in the
browser. Also supports [component](https://github.com/component/component).
Async provides around 20 functions that include the usual 'functional'
suspects (map, reduce, filter, each…) as well as some common patterns
for asynchronous control flow (parallel, series, waterfall…). All these
functions assume you follow the node.js convention of providing a single
callback as the last argument of your async function.
## Quick Examples
```javascript
async.map(['file1','file2','file3'], fs.stat, function(err, results){
// results is now an array of stats for each file
});
async.filter(['file1','file2','file3'], fs.exists, function(results){
// results now equals an array of the existing files
});
async.parallel([
function(){ ... },
function(){ ... }
], callback);
async.series([
function(){ ... },
function(){ ... }
]);
```
There are many more functions available so take a look at the docs below for a
full list. This module aims to be comprehensive, so if you feel anything is
missing please create a GitHub issue for it.
## Common Pitfalls
### Binding a context to an iterator
This section is really about bind, not about async. If you are wondering how to
make async execute your iterators in a given context, or are confused as to why
a method of another library isn't working as an iterator, study this example:
```js
// Here is a simple object with an (unnecessarily roundabout) squaring method
var AsyncSquaringLibrary = {
squareExponent: 2,
square: function(number, callback){
var result = Math.pow(number, this.squareExponent);
setTimeout(function(){
callback(null, result);
}, 200);
}
};
async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){
// result is [NaN, NaN, NaN]
// This fails because the `this.squareExponent` expression in the square
// function is not evaluated in the context of AsyncSquaringLibrary, and is
// therefore undefined.
});
async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){
// result is [1, 4, 9]
// With the help of bind we can attach a context to the iterator before
// passing it to async. Now the square function will be executed in its
// 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`
// will be as expected.
});
```
## Download
The source is available for download from
[GitHub](http://github.com/caolan/async).
Alternatively, you can install using Node Package Manager (npm):
npm install async
__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed
## In the Browser
So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:
```html
<script type="text/javascript" src="async.js"></script>
<script type="text/javascript">
async.map(data, asyncProcess, function(err, results){
alert(results);
});
</script>
```
## Documentation
### Collections
* [each](#each)
* [map](#map)
* [filter](#filter)
* [reject](#reject)
* [reduce](#reduce)
* [detect](#detect)
* [sortBy](#sortBy)
* [some](#some)
* [every](#every)
* [concat](#concat)
### Control Flow
* [series](#series)
* [parallel](#parallel)
* [whilst](#whilst)
* [doWhilst](#doWhilst)
* [until](#until)
* [doUntil](#doUntil)
* [forever](#forever)
* [waterfall](#waterfall)
* [compose](#compose)
* [applyEach](#applyEach)
* [queue](#queue)
* [cargo](#cargo)
* [auto](#auto)
* [iterator](#iterator)
* [apply](#apply)
* [nextTick](#nextTick)
* [times](#times)
* [timesSeries](#timesSeries)
### Utils
* [memoize](#memoize)
* [unmemoize](#unmemoize)
* [log](#log)
* [dir](#dir)
* [noConflict](#noConflict)
## Collections
<a name="forEach" />
<a name="each" />
### each(arr, iterator, callback)
Applies an iterator function to each item in an array, in parallel.
The iterator is called with an item from the list and a callback for when it
has finished. If the iterator passes an error to this callback, the main
callback for the each function is immediately called with the error.
Note, that since this function applies the iterator to each item in parallel
there is no guarantee that the iterator functions will complete in order.
__Arguments__
* arr - An array to iterate over.
* iterator(item, callback) - A function to apply to each item in the array.
The iterator is passed a callback(err) which must be called once it has
completed. If no error has occured, the callback should be run without
arguments or with an explicit null argument.
* callback(err) - A callback which is called after all the iterator functions
have finished, or an error has occurred.
__Example__
```js
// assuming openFiles is an array of file names and saveFile is a function
// to save the modified contents of that file:
async.each(openFiles, saveFile, function(err){
// if any of the saves produced an error, err would equal that error
});
```
---------------------------------------
<a name="forEachSeries" />
<a name="eachSeries" />
### eachSeries(arr, iterator, callback)
The same as each only the iterator is applied to each item in the array in
series. The next iterator is only called once the current one has completed
processing. This means the iterator functions will complete in order.
---------------------------------------
<a name="forEachLimit" />
<a name="eachLimit" />
### eachLimit(arr, limit, iterator, callback)
The same as each only no more than "limit" iterators will be simultaneously
running at any time.
Note that the items are not processed in batches, so there is no guarantee that
the first "limit" iterator functions will complete before any others are
started.
__Arguments__
* arr - An array to iterate over.
* limit - The maximum number of iterators to run at any time.
* iterator(item, callback) - A function to apply to each item in the array.
The iterator is passed a callback(err) which must be called once it has
completed. If no error has occured, the callback should be run without
arguments or with an explicit null argument.
* callback(err) - A callback which is called after all the iterator functions
have finished, or an error has occurred.
__Example__
```js
// Assume documents is an array of JSON objects and requestApi is a
// function that interacts with a rate-limited REST api.
async.eachLimit(documents, 20, requestApi, function(err){
// if any of the saves produced an error, err would equal that error
});
```
---------------------------------------
<a name="map" />
### map(arr, iterator, callback)
Produces a new array of values by mapping each value in the given array through
the iterator function. The iterator is called with an item from the array and a
callback for when it has finished processing. The callback takes 2 arguments,
an error and the transformed item from the array. If the iterator passes an
error to this callback, the main callback for the map function is immediately
called with the error.
Note, that since this function applies the iterator to each item in parallel
there is no guarantee that the iterator functions will complete in order, however
the results array will be in the same order as the original array.
__Arguments__
* arr - An array to iterate over.
* iterator(item, callback) - A function to apply to each item in the array.
The iterator is passed a callback(err, transformed) which must be called once
it has completed with an error (which can be null) and a transformed item.
* callback(err, results) - A callback which is called after all the iterator
functions have finished, or an error has occurred. Results is an array of the
transformed items from the original array.
__Example__
```js
async.map(['file1','file2','file3'], fs.stat, functi
没有合适的资源?快使用搜索试试~ 我知道了~
《html5网页开发实例详解》随书源码2
共2000个文件
js:1645个
html:240个
json:148个
3星 · 超过75%的资源 需积分: 12 58 下载量 166 浏览量
2015-12-06
02:15:17
上传
评论
收藏 13.51MB RAR 举报
温馨提示
由于上传大小权限原因,分两部分上传。详细介绍了html5语义化标签,图像操作,地理定位,本地离线存储,通信api,websocket……共14章,每章都用代码案例详细介绍了关于html5的所有高级新特性。
资源推荐
资源详情
资源评论
收起资源包目录
《html5网页开发实例详解》随书源码2 (2000个子文件)
xor.cpp 3KB
xor.cpp 3KB
impress-demo.css 21KB
res.css 16KB
skeleton.css 9KB
jasmine.css 6KB
layout.css 5KB
qunit.css 4KB
style.css 4KB
mocha.css 4KB
style.css 4KB
style.css 4KB
chat.css 3KB
index.css 3KB
index.css 3KB
style.css 3KB
jasmine.css 2KB
jasmine.css 2KB
docstyle.css 2KB
docstyle.css 2KB
media.css 2KB
iconfont.css 764B
style.css 110B
nan.h 30KB
benchmark.html 7.69MB
demo.html 464KB
index.html 75KB
API.html 56KB
README.html 39KB
README.html 39KB
index.html 38KB
strscan.html 24KB
index.html 23KB
bignumber-vs-bigdecimal.html 18KB
style.html 17KB
005.存储JSON对象.html 16KB
006.将商品拖入购物车.html 15KB
001.保存与读取登录用户名与密码.html 12KB
console-errors.html 12KB
007.拖放图片保存服务器.html 11KB
bignumber-vs-number.html 10KB
index.html 10KB
004.开发一个简单的离线应用.html 9KB
005.检测网络的当前状态.html 8KB
007.添加Geolocation跟踪.html 8KB
003.使用本地数据库.html 7KB
001.使用定时器.html 7KB
009.可拖放文本阅读器.html 7KB
006.开发一个离线留言网页.html 7KB
009.使用Google地图查找路线.html 7KB
005.拖放文件.html 6KB
008.删除本地缓存.html 6KB
005.用户自定义的地理定位.html 6KB
四种定位方式对比分析.html 6KB
index.html 5KB
004.一个桌面提醒工具.html 5KB
004.对照片进行排序.html 5KB
index.html 5KB
index.html 5KB
002.保存与读取临时数据.html 5KB
index.html 5KB
002.WI-FI地理定位.html 5KB
002.拖放图标.html 4KB
008.使用Google地图追踪用户的位置.html 4KB
001.实现网页元素的拖放.html 4KB
004.预览网站内容.html 4KB
002.排队处理订单.html 4KB
index.dust.html 4KB
index.dust.html 4KB
006.cookie-storage-cart.html 4KB
008.设计离线事件处理程序.html 4KB
001.IP地址地理定位.html 4KB
003.设置拖放的效果.html 3KB
009.html 3KB
007.处理定位错误.html 3KB
006.在Goolge Map上显示我在这里.html 3KB
000.通过经纬度在地图上显示地理位置.html 3KB
004.手机地理定位.html 3KB
003.在iframe中嵌入一个可变大小的编辑器内容页.html 3KB
strftime-0800.html 3KB
strftime-0600.html 3KB
strftime-0700.html 3KB
strftime-0000.html 3KB
test.html 2KB
007.存储数据的共享操作页.html 2KB
test.html 2KB
008.拖动脚本文件压缩.html 2KB
blog.html 2KB
handle.html 2KB
specRunner.html 2KB
003.后台运行一段JavaScript吧.html 2KB
every-test.html 2KB
directory.html 2KB
sample.html 2KB
007.存储数据的共享.html 2KB
004.preview.html 2KB
page.html 2KB
attributes_xhtml.html 2KB
attributes_html5.html 2KB
005.定时给客户发消息.html 2KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- heihei3252019-12-21不错的资源
啊哈前端
- 粉丝: 73
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功