promise基础

promise之前有些库在推进这个事情,也有很多代码在用这个,es6将promise作为标准提出来,这是一个非常好的事情,就是把之前一些,大家很向往的写法,概念,真正的标准化,标准化之后大家再写就没什么后顾之忧了,因为他真正的成为一个标准。

 

1、Callback Hell
promise出来的目的就是把callback hell把他干掉,因为在promise之前,这个callback hell是非常烦人的。因为异步这个事情都有callback。

 

之前的callback

 

function loadImg(src, callback, fail){
  var img = document.createElement('img');
   img.src = src;
  img.onload = function(){
    callback(img);
  }
  img.onerror = function(){
    fail();
  }
}

var src = 'https://erp.superboss.cc/resources/css/build/images/login/login-title.png';

loadImg(src, function(img){ 
  console.log(img.width);
},function(){
  console.log('failed');
})

发送一个请求,就是一个异步的过程,需要用callback,图片成功之后怎么样,图片失败之后怎么样。成功之后拿到数据,可能还会写很长很长的一段代码,可读性非常的不友好,也没法合理的去划分这个步骤,promise就可以解决这个问题。





2、Promise语法
function loadImg(src) {
  const promise = new Promise(function (resolve, reject) {
    var img = document.createElement('img');
    img.onload = function(){
      resolve(img);
    }
    img.onerror = function(){
      reject();
    }
    img.src = src;
  })
  return promise;
}

这里只传了src一个参数,然后new了一个promise的实例。然后return promise这个实例。new Promise里面传了一个函数,函数里面有两个参数,其他跟之前一样。看上去很复杂,往往封装的复杂,都是为了更简单的用。

 

let result = loadImg('https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=1370968418,3643736858&fm=173&app=49&f=JPEG?w=218&h=146&s=23B47B2339C0EC9281DD01DA0300C0B0');

result.then(function(img){
  console.log(img.width);
}, function(){
  console.log('failed')
})

result.then(function(img){
  console.log(img.height);
})

下面这个是怎么用。第一个参数是成功,第一个参数是失败。这个result.then可以用多个,打印高度,打印宽度,打印面积,打印地址。这个,,,一个点的内容干一件事,一个点的内容干一件事,分开了,分的清晰明了。分开就好说了,可以集成拓展。

 

总结:
1、new Promise实例,而且要return
2、new Promise时要传入函数,函数有resolve,reject
3、成功时执行resolve(),失败时执行reject()
4、then 监听结果

 

posted @ 2019-06-01 11:15  wzndkj  阅读(347)  评论(0编辑  收藏  举报