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

JavaScript中使用Callback控制流程介紹

 更新時間:2015年03月16日 11:53:23   投稿:junjie  
這篇文章主要介紹了JavaScript中使用Callback控制流程介紹,本文講解了callback的一些問題和優(yōu)化后的寫法并給出代碼實(shí)例,需要的朋友可以參考下

javascript中隨處可見的callback對于流程控制來說是一場災(zāi)難,缺點(diǎn)顯而易見:

1.沒有顯式的return,容易產(chǎn)生多余流程,以及由此引發(fā)的bug。
2.造成代碼無限嵌套,難以閱讀。

下面就來說說怎么解決避免上述的問題。

第一個問題是一個習(xí)慣問題,在使用callback的時候往往會讓人忘了使用return,這種情況在使用coffee-script的時候尤甚(雖然它在編譯成javascript時會自行收集最后的數(shù)據(jù)作為返回值,但是這個返回值并不一定代表你的初衷)??纯聪旅娴睦印?/p>

復(fù)制代碼 代碼如下:

a = (err, callback)->
  callback() if err?
  console.log 'you will see me'

b = ->
  console.log 'I am a callback'

a('error', b)

在這種所謂”error first”的代碼風(fēng)格中,顯然我們不希望出錯時方法a中的后續(xù)代碼仍然被執(zhí)行,但是又不希望用throw來讓整個進(jìn)程掛掉(要死也得優(yōu)雅的死嘛~),那么上面的代碼就會產(chǎn)生bug。

一種解決方案就是老老實(shí)實(shí)的寫if...else...,但是我更傾向于下面的做法:

復(fù)制代碼 代碼如下:

a = (err, callback)->
  return callback() if err?
  console.log 'you will not see me'

b = ->
  console.log 'I am a callback'

a('error', b)

javascript異步方法中的返回值大多沒什么用處,所以這里用return充當(dāng)一個流程控制的角色,比if...else...更少的代碼,但是更加清晰。

第二個問題是娘胎里帶來的,很難根除。

一種不錯的方法是使用一些流程控制模塊來將代碼顯得更加有條理,比如async就是一個不錯的模塊,提供了一系列的接口,包括迭代,循環(huán),和一些條件語句,甚至還包含了一個隊(duì)列系統(tǒng)。下面的例子可以表名兩種寫法的優(yōu)劣

復(fù)制代碼 代碼如下:

#normal

first = (callback)->
  console.log 'I am the first function'
  callback()

second = (callback)->
  console.log 'I am the second function'
  callback()

third = ()->
  console.log 'I am the third function'

first ->
  second ->
    third()

# use async

async = require('async')

async.waterfall [
  first,
  second,
  third
], (err)->

作為睿智的你,會選擇哪一種呢。

相關(guān)文章

最新評論

绥芬河市| 茌平县| 邛崃市| 肃南| 龙泉市| 女性| 连州市| 新干县| 威信县| 娄底市| 富阳市| 中超| 遂溪县| 灵丘县| 晴隆县| 景德镇市| 南平市| 五大连池市| 吉木乃县| 汝州市| 五原县| 阜新市| 鄄城县| 衡山县| 精河县| 高唐县| 高淳县| 四平市| 汤原县| 华坪县| 西平县| 六盘水市| 南溪县| 五指山市| 西吉县| 惠水县| 苍溪县| 陆丰市| 阿拉善左旗| 南和县| 安国市|