npm-async使用

async.series(tasks, callback)

  • tasks能夠是對象或數組,返回類型就是參數類型
  • tasks中傳入回調函數的第一個值非空即中止後面函數執行
  • 按照順序流程進行
async.series({
    one: function (cb) {
        cb(null, 'one')
    },
    two: function (cb) {
        cb(null, 'two')
    }
}, function (err, results) {
    console.log(results);
})

async.waterfall(tasks, callback)

  • async.series類型
  • tasks中能夠將結果向後傳遞
  • tasks參數僅能夠爲數組
async.waterfall([function(cb) {
    cb(null, 'one')
}, function (data, cb) {
    cb(null, data + ' two')
}], function (err, results) {
    console.log(results);
})

async.parallel(tasks, callback)

  • tasks參數能夠是數組或對象
  • tasks函數所有並行執行
  • 注意最終結果參數仍是按照tasks中聲明的順序

async.parallelLimit(tasks, limit, callback)

  • async.parallel相同
  • limit參數限制最大併發數量

async.queue(work, concurrency)

  • 隊列流程控制,增強版paralle()
  • 隊列消息,限制work數量
  • 參數work是執行任務的回調函數形式, concurrency定義同時執行任務的數量
var async = require('async')
var count = 0;

var queue = async.queue(function (task, cb) {
    console.log('work is processing task: ', task.name);
    cb();
}, 2)

queue.push({name: 'one'}, function (err) {
    setTimeout(function () {
        console.log('finished processing foo');
    }, 2000)
})

queue.push({name: 'two'}, function (err) {
    setTimeout(function () {
        console.log('finished processing two');
    }, 1000)
})

queue.push({name: 'three'}, function (err) {
    console.log('finished processing three');
})

queue.push({name: 'four'}, function (err) {
    console.log('finished processing four');
})



//黨最後一個任務交給work時調用,因此這裏在name:four執行前調用
queue.empty = function () {
    console.log('no more tasks wating');
}

//執行完全部任務後調用
queue.drain = function () {
    console.log('all tasks have been processed');
}

async.whilst(test, fn, callback)

  • 流程控制,至關於while
  • 適合以循環的方式執行異步操做
async.whilst(function () {
    return count < 5
}, function (cb) {
    count++;
    setTimeout(function () {
        cb(null, count)
    }, 1000)
}, function (err, data) {
    console.log(data);
})

async.doWhilst(fn, test, callback)

  • async.whilst相似, 至關於do...while語句

async.until(test, fn, callback)

  • async.whilst判斷條件相反

async.doUntil(fn, test, callback)

  • async.doWhilst判斷條件相反
相關文章
相關標籤/搜索