美文网首页
es6 javascript对象Promise

es6 javascript对象Promise

作者: Api调用师 | 来源:发表于2018-06-07 19:22 被阅读0次

Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。

1.模拟同步加载,比如两个ajax请求,需求是ajax1执行完拿到数据后才能执行ajax2,这里我就用setTimeout来表示ajax。

一般的处理方式是

var ajax1=setTimeout(()=>{

    console.log( "ajax1回调了,发起ajax2请求 ");

    var ajax2=setTimeout(()=>{ 

            console.log( "ajax2回调了,发起ajax3请求" );

             var ajax3=setTimeout(()=>{

                         console.log( "ajax3的回调执行了" );

               },1000)

      },1000)

},1000)

用promise实现

new Promise(( resolve,reject )=>{

        setTimeout(()=>{

                console.log( "ajax1回调了,开始调用ajax2的请求函数 ");

                 resolve("哈哈哈哈我是ajax1请求回来的数据");

        })

})

.then((res)=>{

    return new Promise(( resolve,reject )=>{

            console.log("ajax1传过来的参数="+res);

            setTimeout(()=>{

                    console.log( "ajax2回调了,开始调用ajax3的请求函数 ");

                     resolve("哈哈哈哈我是ajax2请求回来的数据");

            })

    })

})

.then((res)=>{

        return new Promise(( resolve,reject )=>{

            console.log("ajax2传过来的参数="+res);

             setTimeout(()=>{

                    console.log( "ajax3回调了");

                    reject("ajax3回调拿到的参数为null,我要报异常");

                })

    })  

})

.catch((err)=>{

    console.log(err);

});

代码多的话两种方式的可读性就很明显了。

2.并行加载,可以让几个函数“并行”异步加载,一起回调。

Promise.all 接收一个 promise对象的数组作为参数,当这个数组里的所有promise对象全部变为resolve或reject状态的时候,它才会去调用 .then 方法。

var fun1=(res)=>{

    return new Promise((resolve,reject)=>{

            setTimeout(()=>{

                //这个请求用了1秒

                resolve(res);

            },1000)

    });

}

var fun2=(res)=>{

        return new Promise((resolve,reject)=>{

                setTimeout(()=>{

                    //这个请求用了3秒

                    resolve(res);

                },3000)

        });

}

var obj={ name:"promise"};

var obj1={ name:"all"}

Promise.all([fun1(obj),fun2(obj1)]).then((res)=>{

    //3秒后

    console.log(res);

    //[{"name":"promise"},{"name":"all"}]

    //返回的是包含所有函数返回值的数组

}).catch((err)=>{

    console.log(err);

})

Promise.all和Promise.race使用方式完全一样,区别在于all是数组中所有函数都执行了resolve方法才回调,race则是第一个执行了resolve方法就回调,这个就不上代码了,只是回调有区别。

相关文章

  • Javascript学习笔记-Promise

    1. Promise简介 Promise是ES6新引入的对象,是新增加的异步处理手段。在Javascript 中在...

  • Promise对象原理解析

    Promise对象原理解析 ES6 原生提供了 Promise 对象。所谓 Promise,就是一个对象,用来传递...

  • Promise.done(),Promise.finally()

    es6 Promise.done(),Promise.finally()promise对象的finally函数为什...

  • 【ECMAScript6】 Promise

    Promise 是什么 Promise 是 ES6 为 JavaScript 异步编程定义的全新 api 。为异步...

  • es6 javascript对象Promise

    Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行...

  • JavaScript(ES6) - Promise对象

    Promise的含义:   Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和...

  • 一些关于Javascript Promise的了解

    Promise 对象是 ES6 的语法,在Javascript中用来进行一个异步操作的最终完成(或失败)及其结果值...

  • ES6--Promise

    学过ES6的同学大概都知道Promise,可想而知Promise在ES6中很重要。 Promise对象代表了未来将...

  • JavaScript 再学习:Promise的含义

    Promise 的含义 Promise 在 JavaScript 语言早有实现,ES6 将其写进了语言标准,统一了...

  • ECMAScript 6 Promise

    ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。 Promise对象有以下两个特点。 ...

网友评论

      本文标题:es6 javascript对象Promise

      本文链接:https://www.haomeiwen.com/subject/dtubsftx.html