-
Notifications
You must be signed in to change notification settings - Fork 395
/
filter_reject.js
112 lines (103 loc) · 2.84 KB
/
filter_reject.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
var async = require('async');
var t = require('./t');
var log = t.log;
/**
* 使用异步操作对集合中的元素进行筛选。需要注意的是,iterator的callback只有一个参数,只能接收true或false。
*
* 对于出错,该函数没有做出任何处理,直接由nodejs抛出。所以需要注意对Error的处理。
*
* async提供了两种方式:
* 1. 并行执行:filter
* 2. 顺序执行:filterSereis
*/
// filter(arr, iterator(item, callback(test)), callback(results))
var arr = [1,2,3,4,5];
/**
* 并行执行,对arr进行筛选。
*/
async.filter(arr, function(item, callback) {
log('1.1 enter: ' + item);
setTimeout(function() {
log('1.1 test: ' + item);
callback(item>=3);
}, 200);
}, function(results) {
log('1.1 results: ', results);
});
// 16.739> 1.1 enter: 1
// 16.749> 1.1 enter: 2
// 16.749> 1.1 enter: 3
// 16.749> 1.1 enter: 4
// 16.749> 1.1 enter: 5
// 16.749> 1.3 enter: 1
// 16.949> 1.1 test: 1
// 16.949> 1.1 test: 2
// 16.949> 1.1 test: 3
// 16.949> 1.1 test: 4
// 16.949> 1.1 test: 5
// 16.949> 1.1 results: [ 3, 4, 5 ]
/**
* 如果出错,将会由nodejs抛出,导致出错。为保证其它代码正常运行,注释掉该测试。
*/
/*
async.filter(arr, function(item, callback) {
log('1.2 enter: ' + item);
setTimeout(function() {
log('1.2 handle: ' + item);
if(item===2) {
throw new Error('myerr');
}
callback(item>=3);
}, 100);
}, function(results) {
log('1.2 results: ', results);
});
*/
/**
* 并行执行,对arr进行筛选。
*/
// 1.3
async.filterSeries(arr, function(item, callback) {
log('1.3 enter: ' + item);
setTimeout(function() {
log('1.3 handle: ' + item);
callback(item>=3);
}, 200);
}, function(results) {
log('1.3 results: ', results);
});
// 16.749> 1.3 enter: 1
// 16.949> 1.3 handle: 1
// 16.949> 1.3 enter: 2
// 17.149> 1.3 handle: 2
// 17.149> 1.3 enter: 3
// 17.369> 1.3 handle: 3
// 17.369> 1.3 enter: 4
// 17.589> 1.3 handle: 4
// 17.589> 1.3 enter: 5
// 17.789> 1.3 handle: 5
// 17.789> 1.3 results: [ 3, 4, 5 ]
/*
* reject跟filter正好相反,当测试为true时,抛弃之
*/
// reject(arr, iterator(item, callback(test)), callback(results)
async.reject(arr, function(item, callback) {
log('1.4 enter: ' + item);
setTimeout(function() {
log('1.4 test: ' + item);
callback(item>=3);
}, 200);
}, function(results) {
log('1.4 results: ', results);
});
// 31.359> 1.4 enter: 1
// 31.359> 1.4 enter: 2
// 31.359> 1.4 enter: 3
// 31.359> 1.4 enter: 4
// 31.359> 1.4 enter: 5
// 31.559> 1.4 test: 1
// 31.559> 1.4 test: 2
// 31.559> 1.4 test: 3
// 31.559> 1.4 test: 4
// 31.559> 1.4 test: 5
// 31.569> 1.4 results: [ 1, 2 ]