内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Nodejs異步流程框架async的方法

Async的簡單介紹:

平江ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

Async是一個流程控制工具包,提供了直接而強大的異步功能?;贘avascript為Node.js設計,同時也可以直接在瀏覽器中使用。Async提供了大約20個函數,包括常用的map, reduce, filter, forEach等,異步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等。

https://github.com/caolan/async

我們常用的是以下四種:

  • 串行無關聯
  • 串行有關聯
  • 并行無關聯
  • 智能控制

1.async.series:串行無關聯:

多個函數或方法要依次執(zhí)行,但是他們之間并沒有什么聯系,只有先后的順序,比如我要寫一個文件,寫完之后像用戶發(fā)送郵件,這兩者之間沒有必然的聯系,但是發(fā)郵件必須在寫文件完成之后。
async里有一個方法series可以實現這一流程,代碼實現如下:

var async = require('async');
console.time('series');
async.series({
  one: function(callback) {
    callback(null, 'one');//callback('i am err','one');異常處理
  },
  two: function(callback) {
    callback(null, 'two');

  },
}, function(error, result) {
  //最后結果
  console.log('error: ' + error);
  console.log('result: ' + result);
  console.timeEnd('series');
});

// error: null
// result: [object Object]
// series: 4.472ms

2.async.waterfall:串行有關聯

瀑布流函數,串行執(zhí)行數組中的每一個函數最后執(zhí)行回調。 語法:async.waterfall(tasks,callback) 第一個參數tasks是一個數組,數組包含的是需要依次執(zhí)行的函數。

第二個參數為回調函數,當瀑布流函數(即tasks數組中的函數)執(zhí)行出現錯誤時會執(zhí)行這個回調函數并將錯誤信息返回,當瀑布流函數無錯誤時,會在執(zhí)行完tasks數組中包含的函數后執(zhí)行這個回調函數。

用法示例: 一般用法:

async.waterfall([
  myFirstFun,
  mySecondFun,
  myLastFun
],function(err,result) { // result回調函數
  // result 相當于tasks數組中最后一個函數(myLastFun)的返回值done
  console.log(result);  // myLastFun
})
function myFirstFun(callback) {
  callback(null,'one','two');
}
function mySecondFun(arg1,arg2,callback) {
  // arg1 相當于 'one' ,arg2 相當于 'two'
  callback(null,'three');
}
function myLastFun(arg1,callback) {
  // arg1 相當于 'three'
  callback(null,'done');
}

3.async.parallel:并行無關聯

task并行運行函數集合,而不必等到上一個函數完成。如果任何函數發(fā)生錯誤,會立刻執(zhí)行回調函數,并返回錯誤信息;若沒有發(fā)生錯誤,則會再所有tasks函數執(zhí)行完畢之后用回掉函數將結果返回。

語法:async.parallel(tasks,callback) 代碼示例:

async.parallel([
  function(callback) {
    setTimeout(function() {
      callback(null, 'one');
    }, 200);
  },
  function(callback) {
    setTimeout(function() {
      callback(null, 'two');
    }, 100);
  }
],function(err, results) {
  console.log(result)}
);

4.async.auto:智能控制

以上都是純串行傳并行,但是當一個場景里,需要使用串行也需要使用并行的時候,雖然分別寫能解決,但是效率不是很高,維護性也不是很好,auto可以解決這一問題。

如下場景:

  • 從某處取得數據
  • 在硬盤上建立一個新的目錄
  • 將數據寫入到目錄下某文件
  • 發(fā)送郵件,將文件以附件形式發(fā)送給其它人。
  • 可以知道1與2可以并行執(zhí)行,3需要等1和2完成,4要等3完成。
  • 使用auto來解決
var async = require('async');
console.time('auto');
async.auto({
  getData: function(callback) {
    setTimeout(function() {
      console.log('1.1: got data');
      callback(null, 'mydata');
    }, 300);
  },
  makeFolder: function(callback) {
    setTimeout(function() {
      console.log('1.1: made folder');
      callback(null, 'myfolder');
    }, 200);
  },
  writeFile: ['getData', 'makeFolder', function(callback) {
    setTimeout(function() {
      console.log('1.1: wrote file');
      callback(null, 'myfile');
    }, 300);
  }],
  emailFiles: ['writeFile', function(callback, results) {
    console.log('emailed file: ', results.writeFile);
    callback(null, results.writeFile);
  }]
}, function(err, results) {
  console.log('err: ', err);
  console.log('results: ', results);
  console.timeEnd('auto');
});

結果如下

1.1: made folder
1.1: got data
1.1: wrote file
emailed file:  myfile
err:  null
results:  { makeFolder: 'myfolder',
  getData: 'mydata',
  writeFile: 'myfile',
  emailFiles: 'myfile'
}
auto: 650.972ms

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯。

分享標題:Nodejs異步流程框架async的方法
本文URL:http://www.rwnh.cn/article48/ggopep.html

成都網站建設公司_創(chuàng)新互聯,為您提供移動網站建設、軟件開發(fā)、動態(tài)網站品牌網站設計、定制網站全網營銷推廣

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

搜索引擎優(yōu)化
财经| 海原县| 洪泽县| 怀化市| 景德镇市| 云浮市| 温宿县| 潞西市| 西充县| 应城市| 调兵山市| 贺州市| 昌平区| 疏附县| 子洲县| 法库县| 兴业县| 江源县| 屯昌县| 调兵山市| 房山区| 刚察县| 新源县| 泸溪县| 阿荣旗| 康马县| 玛多县| 城口县| 仲巴县| 富民县| 东阿县| 鸡东县| 吉安市| 城固县| 云浮市| 富锦市| 纳雍县| 黄骅市| 台湾省| 桃园县| 云龙县|