3分钟学会Promise--API的使用(es6篇)

Promise–API的使用(es6篇)

Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

1,promise简单用法 注:一般用于异步加载
(1)Promise创建就会执行
(2)调用resolve(成功)或reject(失败)并不会终结 Promise 的参数函数的执行

    const promise = new Promise(function (resolve, reject) {
        console.log("Promise创建就会执行");
        if (true) {
            resolve(111);
            console.log("调用resolve或reject并不会终结 Promise 的参数函数的执行") //这段打印还会执行
        } else {
            reject(222);
        }
    });
    
    promise.then(function (res) {
        console.log("成功返回" + res) //111
    }, function (e) {
        console.log("失败返回" + e);  //条件为false 返回 222
    });

2, promise.then() : then两种返回 第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。
promise.catch() :监听rejected 与then第二个参数同理,不同点:如果then方法在运行中抛出错误,也会被catch方法捕获。 注:建议使用catch() 监听错误
promise.finally():不管成功失败都会执行

   const promise = new Promise(function (resolve, reject) {
        if (true) {
            resolve(111);
        } else {
            reject(222);
        }
    });

    //第一种格式
    promise.then(function (res) {
        console.log("成功返回" + res) //111
    }, function (e) {
        console.log("失败返回" + e);
    });

    //第二种格式 (推荐使用第二种)
    promise.then(function (res) {
        console.log("成功返回" + res) //111
    }).catch(function (e) { 
        console.log("失败返回" + e);
    }).finally(function () {
        console.log("成功失败都会执行");
    });

3, Promise.all():监听多个Promise返回 ,等所有Promise执行完毕才会返回
Promise.race() :监听多个Promise返回 ,那个Promise执行完毕的早就会返回那个(只返回一个Promise的值)

    const promise1 = new Promise(function (resolve, reject) {
        setTimeout(() => {  //异步操作  相当于ajax 一快一慢
            resolve(111);
        }, 5000)
    });
    const promise2 = new Promise(function (resolve, reject) {
        setTimeout(() => { 
            resolve(222);
        }, 1000)
    });

    Promise.all([promise1,promise2]).then(function (res) {
        console.log(res)  //5s后执行返回[111,222]  等所有Promise执行完才会触发
    }).catch(function (e) { 
        console.log(e)  //如果有一个失败了就会触发catch  返回第一个失败的值 
    });
    
    Promise.race([promise1,promise2]).then(function (res) {
        console.log(res)  //1s后执行返回 》222
    }).catch(function (e) { 
        console.log(e)  //同上
    });

4, 注:个人感觉不常用
Promise.resolve() :将现有的对象转为Promise对象
Promise.reject() :将现有的对象转为Promise对象,但是该实例的状态为失败

实例一
let obj= {
  then: function(resolve, reject) {
      resolve(111);
  }
};
let one = Promise.resolve(thenable);
one.then(function(value) {
  console.log(value);  // 111
});

实例二:如果参数是一个原始值,或者是一个不具有then方法的对象,则Promise.resolve方法返回一个新的 Promise 对象
const p = Promise.resolve('222');
p.then(function (s){
  console.log(s)   //222
});

5,Promise.try() :让同步函数同步执行,异步函数异步执行

const f = () => console.log('one');
Promise.resolve().then(f);  //转为Promise对象,同步执行就变成异步执行了
console.log('two');  //先执行
// two
// one	

const f = () => console.log('one');
Promise.try(f); //同步执行
console.log('two');  
// one
// two

本文参考于:http://es6.ruanyifeng.com/#docs/promise

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值