最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript中使用Callback控制流程介绍_javascript技巧

来源:懂视网 责编:小采 时间:2020-11-27 21:35:46
文档

JavaScript中使用Callback控制流程介绍_javascript技巧

JavaScript中使用Callback控制流程介绍_javascript技巧:javascript中随处可见的callback对于流程控制来说是一场灾难,缺点显而易见: 1.没有显式的return,容易产生多余流程,以及由此引发的bug。 2.造成代码无限嵌套,难以阅读。 下面就来说说怎么解决避免上述的问题。 第一个问题是一个习惯问题,在使用call
推荐度:
导读JavaScript中使用Callback控制流程介绍_javascript技巧:javascript中随处可见的callback对于流程控制来说是一场灾难,缺点显而易见: 1.没有显式的return,容易产生多余流程,以及由此引发的bug。 2.造成代码无限嵌套,难以阅读。 下面就来说说怎么解决避免上述的问题。 第一个问题是一个习惯问题,在使用call

javascript中随处可见的callback对于流程控制来说是一场灾难,缺点显而易见:

1.没有显式的return,容易产生多余流程,以及由此引发的bug。
2.造成代码无限嵌套,难以阅读。

下面就来说说怎么解决避免上述的问题。

第一个问题是一个习惯问题,在使用callback的时候往往会让人忘了使用return,这种情况在使用coffee-script的时候尤甚(虽然它在编译成javascript时会自行收集最后的数据作为返回值,但是这个返回值并不一定代表你的初衷)。看看下面的例子。

代码如下:
a = (err, callback)->
callback() if err?
console.log 'you will see me'

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

a('error', b)

在这种所谓”error first”的代码风格中,显然我们不希望出错时方法a中的后续代码仍然被执行,但是又不希望用throw来让整个进程挂掉(要死也得优雅的死嘛~),那么上面的代码就会产生bug。

一种解决方案就是老老实实的写if...else...,但是我更倾向于下面的做法:
代码如下:
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充当一个流程控制的角色,比if...else...更少的代码,但是更加清晰。

第二个问题是娘胎里带来的,很难根除。

一种不错的方法是使用一些流程控制模块来将代码显得更加有条理,比如async就是一个不错的模块,提供了一系列的接口,包括迭代,循环,和一些条件语句,甚至还包含了一个队列系统。下面的例子可以表名两种写法的优劣
代码如下:
#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)->

作为睿智的你,会选择哪一种呢。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

JavaScript中使用Callback控制流程介绍_javascript技巧

JavaScript中使用Callback控制流程介绍_javascript技巧:javascript中随处可见的callback对于流程控制来说是一场灾难,缺点显而易见: 1.没有显式的return,容易产生多余流程,以及由此引发的bug。 2.造成代码无限嵌套,难以阅读。 下面就来说说怎么解决避免上述的问题。 第一个问题是一个习惯问题,在使用call
推荐度:
标签: 使用 js javascript
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top