最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nodejs異步流程框架async的方法

 更新時間:2019年06月07日 10:16:32   作者:websun  
這篇文章主要介紹了Nodejs異步流程框架async的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Async的簡單介紹:

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

https://github.com/caolan/async

我們常用的是以下四種:

  • 串行無關聯(lián)
  • 串行有關聯(lián)
  • 并行無關聯(lián)
  • 智能控制

1.async.series:串行無關聯(lián):

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

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:串行有關聯(lián)

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

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

用法示例: 一般用法:

async.waterfall([
  myFirstFun,
  mySecondFun,
  myLastFun
],function(err,result) { // result回調(diào)函數(shù)
  // result 相當于tasks數(shù)組中最后一個函數(shù)(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:并行無關聯(lián)

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

語法: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可以解決這一問題。

如下場景:

  • 從某處取得數(shù)據(jù)
  • 在硬盤上建立一個新的目錄
  • 將數(shù)據(jù)寫入到目錄下某文件
  • 發(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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Egret引擎開發(fā)指南之運行項目

    Egret引擎開發(fā)指南之運行項目

    Egret Framework是一款使用TypeScript語言構建的開源免費的移動游戲框架。Egret Framework的核心定位是開放,高效,優(yōu)雅。通過它,你可以快速地創(chuàng)建HTML5類型的移動游戲,也可以將游戲項目編譯輸出成為目標移動平臺的原生游戲應用。
    2014-09-09
  • Node.js配合node-http-proxy解決本地開發(fā)ajax跨域問題

    Node.js配合node-http-proxy解決本地開發(fā)ajax跨域問題

    這篇文章主要介紹了Node.js配合node-http-proxy解決本地開發(fā)ajax跨域問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • Express 框架中使用 EJS 模板引擎并結合 silly-datetime 庫進行日期格式化的實現(xiàn)方法

    Express 框架中使用 EJS 模板引擎并結合 silly-datetime

    這篇文章主要介紹了Express 框架中使用 EJS 模板引擎并結合 silly-datetime 庫進行日期格式化的實現(xiàn)方法,結合具體實例形式分析了express框架引入EJS模版以及導入 silly-datetime 庫的格式化方法傳遞給EJS模版使用的相關操作技巧,需要的朋友可以參考下
    2023-05-05
  • npm?工具庫?yenv使用簡介

    npm?工具庫?yenv使用簡介

    這篇文章主要為大家介紹了npm?工具庫?yenv使用簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 使用nodejs實現(xiàn)JSON文件自動轉(zhuǎn)Excel的工具(推薦)

    使用nodejs實現(xiàn)JSON文件自動轉(zhuǎn)Excel的工具(推薦)

    這篇文章主要介紹了使用nodejs實現(xiàn),JSON文件自動轉(zhuǎn)Excel的工具,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 關于Node.js的events.EventEmitter用法介紹

    關于Node.js的events.EventEmitter用法介紹

    本篇文章主要介紹了關于Node.js的events.EventEmitter用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • Sequelize中用group by進行分組聚合查詢

    Sequelize中用group by進行分組聚合查詢

    大家都知道在SQL查詢中,分組查詢是較常用的一種查詢方式。分組查詢是指通過GROUP BY關鍵字,將查詢結果按照一個或多個字段進行分組,分組時字段值相同的會被分為一組。在Node.js基于Sequelize的ORM框架中,同樣支持分組查詢,使用非常簡單方便。下面來看看詳細的介紹。
    2016-12-12
  • 搭建一個Koa后端項目腳手架的方法步驟

    搭建一個Koa后端項目腳手架的方法步驟

    這篇文章主要介紹了搭建一個Koa后端項目腳手架的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • node實現(xiàn)分片下載的示例代碼

    node實現(xiàn)分片下載的示例代碼

    這篇文章主要介紹了node實現(xiàn)分片下載的示例代碼,使用場景包括基于瀏覽器的流文件片段傳輸、基于客戶端的分片下載等。感興趣的小伙伴們可以參考一下
    2018-10-10
  • 使用Node實現(xiàn)Git倉庫批量克隆的操作步驟

    使用Node實現(xiàn)Git倉庫批量克隆的操作步驟

    分享一個node腳本,通過調(diào)用gitee的OpenApi獲取自己的代碼倉庫列表,達到批量克隆項目的效果,文中通過代碼示例和圖文講解的非常詳細,感興趣的小伙伴可以參考閱讀一下
    2024-04-04

最新評論

铁力市| 永泰县| 抚顺县| 镇原县| 即墨市| 延寿县| 大新县| 苍溪县| 岳西县| 三江| 临沧市| 大同市| 蓬莱市| 时尚| 翼城县| 威宁| 遂溪县| 龙游县| 大冶市| 咸丰县| 同仁县| 和龙市| 黑山县| 贡嘎县| 日喀则市| 达孜县| 当涂县| 厦门市| 丹江口市| 新乡市| 沛县| 凤阳县| 恩平市| 宜兰县| 土默特右旗| 尚义县| 宁强县| 上思县| 潍坊市| 高平市| 肥西县|