关于promise

谈谈promise

当别人问你关于promise的问题

  1. promise常用来来处理异步操作,用来解决回调地狱
  2. promise带有三种状态,pedding:初始状态,resolved:成功状态图,rejected:失败状态
  3. promise可以链式编程

Promise 代表Promise构造函数,对外提供统一的 API,自己身上有all、reject、resolve等方法,原型上有then、catch等方法。我们在函数中存放一个异步操作,返回实例化对象接受对象的值

使用Promise生成实例对象,promise对象会继承构造函数的原型;就是说它只有.then .catch方法

构造函数的all方法

    let p1=Promise.resolve('success1')
    let p2=Promise.resolve('success2')
    let p3=Promise.resolve('success3')

    //Premise.all方法会将所有成功的结果放入一个数组中,如果有一个失败,就返回失败的结果
    let result = Promise.all([p1,p2,p3])
    console.log(result); // [success1,success2,success3]

构造函数的race方法

    let p1 = new Promise((resolve,reject) => {
      setTimeout(() => {
        resolve('success1')
      }, 1000)

    })
    let p2 = Promise.reject('success2')
    p2.catch(err=>{console.log(err);})
    let p3 = Promise.resolve('success3')

    //Promise.race()方法会返回最早改变状态的promise结果,谁执行快,返回谁,不管成功还是失败
    let result = Promise.race([p1, p2, p3])
    console.log(result); //success2

普通封装

        let p=new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve('123')
            },3000)
        })

        p.then(res=>{
            console.log(res);
        }).catch(err=>{
            console.log(err);
        })
promise封装fs请求文件函数
function getFile (path) {
  return new Promise((resolve, reject) => {
    require('fs').readFile(path, (err, data) => {
      if (err) {
        reject(err)
        return
      }
      resolve(data.toString())
    })
  })
}

promise封装ajax

function fetch(method, url, data){
    return new Promise((resolve, reject) => {
        var xhr = new XMLHttpRequest();
        var method = method || "GET";
        var data = data || null;
        xhr.open(method, url, true);
        xhr.onreadystatechange = function() {
            if(xhr.status === 200 && xhr.readyState === 4){
                resolve(xhr.responseText);
            } else {
                reject(xhr.responseText);
            }
        }
        xhr.send(data);
        })
}

// 使用
fetch("GET", "/some/url.json", null)
.then(result => {
    console.log(result);
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值