Promise回调地狱学习小小小小小笔记

Promise属于ES6新加入的语法

目前在浏览器中输入Promise就可以看到有这个对象了

用法是创建一个新的函数来包括原来的函数体并且在原来的函数体中再包一个可以返回一个新的实例化Promise对象而这个promise自带resolve用于回调

like this:

    function promiseAnimate(ball,dis){
        return new Promise(function(resolve,reject){
            function _animation() {
                setTimeout(function () {
                    var marginLeft = parseInt(ball.style.marginLeft);
                    if (marginLeft == dis) {
                        resolve()
                    } else {
                        if (marginLeft < dis) {
                            marginLeft++
                        } else {
                            marginLeft--
                        }
                        ball.style.marginLeft = marginLeft + ‘px‘
                        _animation();
                    }
                }, 13)
            }
            _animation();//由于被包裹进去之后无法进行加载那个方法所以要在函数的Promise内部执行这个函数
        })
    }

原函数体:

    function _animate(){
        setTimeout(function () {
            var marginLeft = parseInt(ball.style.marginLeft)
            if(marginLeft==dis){
                resolve()
            }else{
                if(marginLeft<dis){
            //dosomething....
                }
            }
        },13)
    }

而调用部分

    promiseAnimate(ball1,100)
        .then(function(){
              return promiseAnimate(ball2,200)
        })
        .then(function(){
            return promiseAnimate(ball3,300)
        })
        .then(function(){
            return promiseAnimate(ball3,100)
        })
        .then(function(){
            return promiseAnimate(ball2,100)
        })
        .then(function(){
            return promiseAnimate(ball1,100)
        })

首先是第一次开始调用这个函数,由于有resolve(详细的原理还不清楚)在执行完以上的就会符合条件进行resolve(),由于之前在最外层的函数(promiseAnimate)内返回了一个实例化了的promise对象所以这个对象就有了then的方法(具体内部发生了目前还不了解)

使用环境设想:平常会用到比较多的回调函数 这个如何让自己使用回调的更方便

resolve()不传入参数是访问不到其他东西的

.then 之后的return PromiseAnimate()应该是为了下次的回调所以要return

留下的问题:这个如何让自己使用回调的更方便?

--------------------

待更新...

时间: 2024-10-07 10:44:46

Promise回调地狱学习小小小小小笔记的相关文章

js异步回调Async/Await与Promise区别 新学习使用Async/Await

Promise,我们了解到promise是ES6为解决异步回调而生,避免出现这种回调地狱,那么为何又需要Async/Await呢?你是不是和我一样对Async/Await感兴趣以及想知道如何使用,下面一起来看看这篇文章:Async/Await替代Promise的6个理由. 什么是Async/Await? async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. async/await与Prom

[学习笔记]iphone学习小技巧

1. 版本控制 -- 是否响应某个方法 .查看当前系统版本. eg: [self respondsToSelector:@Selector(presentModalViewController:animated:)]//Yes:表示响应这个方法 [[UIDevice currentDevice].systemVersion floatValue] < 7.0 //判断当前系统是否小于7.0 2. 模态视图动画设置 eg: ModalViewController *modalVC = [[Moda

MongoDB 学习小笔记

1.配置:mongod --dbpath=D:\MongoDB\data mongo2.基本的增删查改 find() update()-- 整体更新,局部更新. 修改器: $inc db.person.update({"age":23},{$inc:{"salary":1000}}) 第一个参数为条件.第二个参数为修改的值,但值必须为整数.($inc allowed for numbers only) $set 修改器: db.person.update({&quo

基于PROMISE解决回调地狱问题

回调地狱问题: 在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱.比如说你要把一个函数 A 作为回调函数,但是该函数又接受一个函数 B 作为参数,甚至 B 还接受 C 作为参数使用,就这样层层嵌套,人称之为回调地狱,代码阅读性非常差. 例如:要发送三个异步的请求要求前面一个请求完成之后再依次发送请求. $.ajax{ url:'url1', success:result=>{ $.ajax{ url:'

js中promise解决callback回调地狱以及使用async+await异步处理的方法

1.callback回调地狱 function ajax(fn) { setTimeout(()=> { console.log('你好') fn() }, 1000) } ajax(() => { console.log('执行结束') ajax(()=>{ console.log('执行结束') ajax(()=>{ console.log('执行结束') ajax(()=>{ console.log('执行结束') }) }) }) }) 2.promise解决回调地狱

async + promise 解决回调地狱

// 解决异步回调地狱的方案: async + promise async function writeFile() { // 打开文件 const fd = await new Promise((resolve, reject) => { // 执行 打开文件 异步操作 fs.open('c.txt', 'w', (err) => { if (!err) { // 将promise对象的状态改成 成功状态 resolve(); } else { // 将promise对象的状态改成 失败状态

回调地狱以及用promise怎么解决回调地狱

哈哈哈,我又又又回来了,不好意思,最近枸杞喝的比较到位,精力比较旺盛. 现在我们来聊一聊啥是回调地狱,注意是回调地狱啊   不是RB人民最爱拍的那啥地狱啊,来吧,上车吧少年,这是去幼儿园的车 都让开,我要上高清无码大图了啊,青少年注意避让 原文地址:https://www.cnblogs.com/suihang/p/9595548.html

回调地狱的解决办法

回调是地狱是容易遇到的坑,解决方案是使用promise 碎碎念 相信各位玩家肯定都写过下面的这样代码: // 同时发送两个请求 let url = 'xxxxx', url1 = 'xx' $.ajax({ url, success(data) { $.ajax({ url: url1, success(data) { console.log('done') } }) } }) 是不是很贴切? 有可能有的新手小伙伴连回调都不知道,这里给大家普及一下 /* ** time - 时间 ** call

Android学习小Demo(20)关于Fragment的应用

Android在3.0之后引入了Fragment的概念,我猜测其想法可能只是想更好地兼容大屏幕或者平板的开发,因为大屏幕可以展示更多的内容,而内容一多,逻辑有可能就乱,而利用Fragment,则可以将不同的逻辑封装进不同的Fragment中,但是展现呢,还是在同一个Activity中,在同一个屏幕上显示.而对于屏幕并不大的手机来说,如果一个页面展示的东西并不多,那么其实将逻辑直接写在Activity,利用多个Activity实现多个页面的展示,我觉得也是可以接受的,毕竟用Activity还是用F