ES6 Promise 用法

用多了异步回调函数,起初看Promise也是一头雾水....其实也很简单:

由浅入深先看下面:

Promise其实是一个构造函数; 用new操作符; Promise接收一个函数作为参数;先不看resolve和reject;

在这里只想说明一点的是:new 一个Promise之后 ,promise中的函数的代码会自动运行;(打开浏览器试试)

但是更多的是做一些异步操作,而不是直接输出console.log(" ");

说来说去这到底跟resovle,和reject这两个有啥关系呢,我们可以用了干嘛?

再看:

先来说一下:Promise对象上有 then,catchall三大方法

第三个截图中:我们写了一个resolve("代表一个数据");其实现在可以大概明白,resovle是我们自己定义的,你想干嘛就干嘛,甚至你可以写一个reject("我代表一个失败的数据..");在下图就会在fail函数中输出;如果在Promise中使用了reject("reject"),那么then必须有第二个参数来接收失败的回调;没有的话就强制性报错了 ;

这一步可以先总结一下:就是then函数中的函数参数,可以接收promise中的数据(resolve的,或reject的);比如你可以在Promise中$.get({ })一个后端数据,然后把后端返回的数据放到resolve中(或者reject中) ;在我看来,resovle和reject没有区别(都说了什么状态是成功是失败,写reject,还是写resolve是右你自己决定的);只是then接收的时候有区别

为了理解resovle和reject是自己定义的我们看看下图就明白了:

(我们把p这个Promise封装在一个函数中,等到想要的时候再调用, 因为文章前面说了, new一个Promise会马上被执行..)

函数asy接收参数num;如果num<10 就调用resolve( );否则认为是reject的数据; 接收结果分别在then的两个函数中;

Promise的then方法还可以返回一个promise(),这样可以链式调用;

比如 promise_a.then().then();每个then都会接收前面promise返回的数据;

promise.catch().会捕捉前面promise产生的异常.而不至于程序真正报错,像 try...catch那样;

下面说说promise的重头戏: 意思是把所有的异步请求集合到一起,得到结果...

Promise.all( ) : 不说了,看代码就明白:  

function asy1(num) {

    var p = new Promise(function (resolve, reject) {
        //做一些异步操作
        if (num < 10) {
            setTimeout(function () {
                resolve("数据正常 asy1....")
            }, 2000);
        }else{
            reject("数据异常asy1....")
        }
    })
    return  p;
}

function asy2(num) {

    var p = new Promise(function (resolve, reject) {
        //做一些异步操作
        if (num < 10) {
            setTimeout(function () {
                resolve("数据正常 asy2....")
            }, 2000);
        }else{
            reject("asy2....")
        }
    })
    return  p;
}

function asy3(num) {

    var p = new Promise(function (resolve, reject) {
        //做一些异步操作
        if (num < 10) {
            setTimeout(function () {
                resolve("数据正常 asy3....")
            }, 2000);
        }else{
            reject("asy3....")
        }
    })
    return  p;
}
Promise.all([asy3(7),asy3(8),asy3(9)]).then( res=>{console.log(res)})

现在的理解就这么多,够用以后再发现问题;

原文地址:https://www.cnblogs.com/liuliu-hai/p/9476284.html

时间: 2024-11-08 23:44:10

ES6 Promise 用法的相关文章

Es6 Promise 用法详解

Promise是什么?? 打印出来看看  console.dir(Promise) 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法.这么说用Promise new出来的对象肯定就有then.catch方法喽,没错. 那就new一个玩玩吧. var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(functi

ES6 Promise 用法讲解(转)

Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000);}); Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,rejec

ES6 Promise 用法讲解

Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 例1:var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000); }); 例2:/* 定义一个使用promise的ajax请求,这里依赖jq

转--ES6 Promise 用法讲解

Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000); }); Promise的构造函数接收一个参数,是函数,并且传入两个参数:reso

ES6 Promise用法讲解

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果. ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } }); P

ES6 Promise用法详解

What is Promise? Promise是一个构造函数,接受一个参数(Function),并且该参数接受两个参数resolve和reject(分别表示异步操作执行成功后的回调函数.执行失败后的回调函数) var p = new Promise(function(resolve, reject){ setTimeout(function(){ console.log('执行完成'); resolve('成功了!'); }, 2000); }); 运行代码,2秒后输出"执行完成".

ES6 Promise 异步操作

最近越来越喜欢与大家进行资源分享了,并且及时的同步到自己的园子内,为什么呢? 一.小插曲(气氛搞起) 在上个月末,由于领导的高度重视(haha,这个高度是有多高呢,185就好了),走进了公司骨干员工的队列,并参与为骨干员工准备的"高效能人士的七项修炼"课程培训. 那接下来我是不是该简明扼要的说一下七项修炼有哪些,很受用哦. 七项修炼之一:积极主动 ==> 积极心态去处理事情.不怕事. 七项修炼之二:明确方向 ==> 要做到以终为始,将终点作为起点,帮助你实现生活与工作中的重

通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise

Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同.不过它们的作用可以简单的用两句话来描述 Deffered 触发 resolve 或 reject Promise 中申明 resolve 或 reject 后应该做什么(回调) 在 jQuery 中 var deferred = $.Deferred(); var promise = deferred.promise(); 在 ES6 中 var deferred = Pro

c/c++ 多线程 等待一次性事件 std::promise用法

多线程 等待一次性事件 std::promise用法 背景:不是很明白,不知道为了解决什么业务场景,感觉std::async可以优雅的搞定一切的一次等待性事件,为什么还有个std::promise. 用法:和std::async一样,也能够返回std::future,通过调用get_future方法.也可以通过future得到线程的返回值. 特点: 1,是个模板类,模板类型是个方法类型,比如double(int),有一个参数,类型是int,返回值类型是double. std::promise<i