node.js中同步/非同步處理模組async解析
Async非同步處理模組!
安裝很簡單,就跟普通的安裝模組一樣就行了
npm install --save-dev async
這樣就安裝成功了! 接下來就是引用了,在程式碼裡引用模組:
var async = require('async');
這樣引用也就ok了!在程式碼後面就可以輕鬆的用async這個對像模組了!
查了下官方文件,這個模組的方法實在是太多了!看的眼花……
下面我們來談談小sam覺得比較常用到的幾個方法就好了
series
1.series(tasks, [callback]) 順序執行陣列、集合內的函式,當前面一個函式執行完成就會立即執行下一個函式,如果函式觸發了錯誤,可以在callback函式中驗證,否則會一直執行完成tasks
話多沒用,程式碼才是親爹
用例:
//tasks傳的是一個數組函式 async.series([ function(callback) { // do some stuff ... callback(null, 'one'); }, function(callback) { // do some more stuff ... callback(null, 'two'); }], // optional callback function(err, results) { // results is now equal to ['one', 'two'] }); // an example using an object instead of an
//我覺得這裡很重要err是上面兩個函式的錯誤資訊,而results這個引數是一個數組物件,它們的值是上面陣列函式每個callback裡面的引數。
//下面的程式碼其實跟上面的差不多,只是stasks傳的是物件而不是陣列
async.series({ one: function(callback) { setTimeout(function() { callback(null, 1); }, 200); }, two: function(callback) { setTimeout(function() { callback(null, 2); }, 100); } }, function(err, results) { // results is now equal to: {one: 1, two: 2} });
parallel
2.parallel(tasks, [callback]) 並行執行陣列、集合內的方法,不用等到前一個函式執行完再執行下一個函式,如果函式觸發了錯誤,可以在callback函式中驗證
async.parallel(
[
function(callback) {
setTimeout(function() {
callback(null, 'one');
},
200);
},
function(callback) {
setTimeout(function() {
callback(null, 'two');
},
100);
}
],
// optional callback
function(err, results) {
// the results array will equal ['one','two'] even thoug
// the second function had a shorter
timeout
}
);
parallelLimit
3.parallelLimit(tasks, limit, [callback]) 和2用法一樣,只是多了一個任務數量限制,最多允許多少個任務在並行執行
whilst
4.whilst(test, fn, callback) 等同於while的用法,第一個引數為驗證條件,第二個引數為執行函式,第三個引數為驗證失敗後回撥函式,一般在做延遲動畫用的比較多
var count = 0;
async.whilst(
function () { return count < 5; },
//驗證成 功繼續,失敗進回撥
function (callback) {
count++;
setTimeout(callback, 1000);
},
function (err) {
// 5 seconds have passed
}
);
waterfall
5.waterfall(tasks, [callback]) tasks依次執行,前一個函式的回撥會作為後一個函式的引數,如果有任何任務通過一個錯誤的回撥,下一個函式不執行
async.waterfall([
function(callback){
callback(null, 'one', 'two');
},
function(arg1, arg2, callback){
// arg1 now equals 'one' and arg2 nowequals 'two'
callback(null, 'three');
},
function(arg1, callback){
// arg1 now equals 'three'
callback(null, 'done');
}
], function (err, result) {
// result now equals 'done'
});
compose
6.compose(fn1, fn2...) 按順序加入到佇列中,按順序執行,將上一個函式的結果作為下一個函式的值
function add1(n, callback) {
setTimeout(function () {
callback(null, n + 1);
}, 10);
}
function mul3(n, callback) {
setTimeout(function () {
callback(null, n * 3);
}, 10);
}
var add1mul3 = async.compose(mul3, add1);
add1mul3(4, function (err, result) {
// result now equals 15
});