promise

promise

promise是解决异步的一种方案,也就是让promise帮我们去处理异步,最终promise会返回异步处理的结果。

有了promise之后,让异步处理更加灵活,还能够解决之前的回调地狱的问题。

promise的使用

1. 我们需要用promise帮我们处理异步

var p = new Promise(function(resolve, reject){
    // 在这里来进行真正的异步处理
      setTimeout(function(){

      }, 100);
});
  1. promise在处理异步的时候,会成功或者失败,成功调用resolve,失败调用reject
var p = new Promise(function(resolve, reject){
      // 第一个形参是成功的回调 异步成功 resolve
      // 第一个形参是失败的回调 异步失败 reject

      // 这里用于实现异步任务
      setTimeout(function(){
        var flag = true;
        if(flag) {
          // 正常情况
          resolve('hello123');
        }else{
          // 异常情况
          reject('出错了123');
        }
      }, 100);
    });
  1. 获取到异步的结果
p.then(function(data){
    // 这个函数 就相当于 resolve('hello')
    console.log(data)
},function(info){
    // 这个函数 就相当于 resolve('hello')
    console.log(info)
});
promise解决回调地狱的问题

在promise实例的then方法内部 如果return了一个新的Promise实例对象

下一个.then的成功回调函数,是属于新的promise处理异步的成功的回调

queryData('http://localhost:3000/data').then(function(res){
      console.log(res)
      // queryData 返回的是 Promise实例对象
      return queryData('http://localhost:3000/data1')
    }).then(function(res) {
      console.log(res)
      return queryData('http://localhost:3000/data2')
    }).then(function(res) {
      console.log(res)
    })
promise的实例方法

通过实例对象来调用的方法或属性,我们叫做:实例方法或者实例属性

then: 第一个回调函数是成功的回调,第二个是失败的回调

catch:专门用来处理失败的

finally:不管成功还是失败都会执行

foo()
      .then(function(data){
        console.log(data)
      })
      .catch(function(data){
        console.log(data)
      })
      .finally(function(){
        console.log('finished')
      });
promise的静态方法

通过构造函数调用的属性或者方法,我们叫做:静态方法或者静态属性

all:该方法接收一个数组,数组的每一项都是处理异步的promise实例对象,数组每一项的异步都处理完成之后,all的then的成功的回调才会执行

race:使用的方式和all一摸一样,区别就是race的then的成功回调,只要有一个异步成功,then就调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值