关于回调地狱

现在有一个小demo,有四个<div class="ball"></div>,样式是设成一个个小圆球,我们希望小球能一个一个往右移动,但是必须是第一个移动完才能移动第二个,以此类推,移动完4个小球

一般写法,无非就是写一个函数,对函数传参数下表进行递归,可是后期改需求,不是依次移动小球,而是按不同顺序移动,那么,就得写异步回调函数,进行层层嵌套,那么这样写结果如何呢,用回调函数对未来发生一件事结果进行处理,造成①可维护性特别差②可读性特别差③不方便书写

在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱。

解决回调地狱方法我在此介绍一种:Promise

Promise,他是一个ES6新出的对象,一个延迟对象,是用来处理异步操作的,对未来发生的事情的结果,远见规划,要做一件什么事情 【未来发生的事】,如果成功 我要怎么做,如果失败 我要怎么做,就像一个状态机,最重要的是写异步调用的时候更加优雅,更加美观便于阅读,便于后期调试和修改

这里我们用JQuery来写(方法一样)

$(function () {
	var promise = $.Deferred(); // 状态机
	
	function moveBall (selector, left) {
	    var promise = $.Deferred();
	    $(selector).animate({ left: left}, 2000, 'swing', function () {
	        promise.resolve();
	    });
	    return promise;
	}
	
	moveBall('.ball:nth-child(1)', 1000)
	    .then(function () { return moveBall('.ball:nth-child(2)', 1000) })
	    .then(function () { return moveBall('.ball:nth-child(3)', 1000) })
	    .then(function () { return moveBall('.ball:nth-child(4)', 1000) })
	    .then(function () { console.log('运动结束')});
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值