愚墨的博客
  • 首页
  • 前端技术
  • 面试
只争朝夕不负韶华
  1. 首页
  2. 前端技术
  3. 正文

Promise

2016年06月25日 2799点热度 0人点赞 0条评论

直接正题,ES6的Promise解决了困扰人们很久的回调问题,回调函数在编码中用的很多,但是多层嵌套的回调会让代码看起来不是很整洁,也影响阅读,Promise旨在解决这个问题,用同步的写法解决异步的问题。

解决了用同步的写法解决异步的问题

没有使用promise的多层回调:

function fn() {
  function fn1() {
    function fn3() {
      function fn4() {
        ...
      }
    }
  }
}

不直观,维护起来也比较麻烦。

promise的使用:

直接可以使用new Promise()来创建一个promise对象,其参数是一个包含resolve,reject两个参数的function,并在该函数中调用执行者两个参数。该函数里面会执行resolve()方法,表示异步调用成功时执行,reject()表示异步调用失败时候调用。

在链式调用时候,then后面接的第一个函数为成功时调用的函数—resolve,并且这里的默认参数等同于promise中resolve中的初始参数;then里面的第二个函数,为异步调用失败之时执行。

catch方法,相当于then(null,function(data){console.log(data)}失败方法调用的一个缩写。

var p = new Promise(function(resolve,reject){
    if(data){
      resolve('success');
    }else{
      reject('filed');
    }
})
p.then(function(data){
    console.log(data);//success
},function(data){
    console.log(data);//filed
}).catch(data){
    console.log(data);//filed
}

Promise.all

Promise.all 可以接收一个元素为 Promise 对象的数组作为参数,当这个数组里面所有的 Promise 对象都变为 resolve 时,该方法才会返回。

var p1 = new Promise(function (resolve,reject) {
  if(true){
    resolve('success1')
  }else{
    reject('filed1')
  }
})

var p2 = new Promise(function (resolve,reject) {
  if(true){
    resolve('success2')
  }else{
    reject('filed2')
  }
})

Promise.all([p1, p2]).then(function (result) {
  console.log(result); // [ 'success1', 'success2' ]
});

promise 的then方法可以链式调用是因为每一个then完成之后都会返回一个新的Promise对象供下一个方法调用。

 

标签: 暂无
最后更新:2017年02月25日

愚墨

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >

文章评论

取消回复

搜搜看看
历史遗迹
  • 2023年5月
  • 2022年9月
  • 2022年3月
  • 2022年2月
  • 2021年12月
  • 2021年8月
  • 2021年7月
  • 2021年5月
  • 2021年4月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年9月
  • 2020年7月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年1月
  • 2019年5月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年9月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年11月
  • 2017年7月
  • 2017年6月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年9月
  • 2016年8月
  • 2016年7月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年10月
  • 2015年9月
  • 2015年7月
  • 2015年6月
  • 2015年4月

COPYRIGHT © 2020 愚墨的博客. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS