美文网首页Ethereum
JavaScript之Promises

JavaScript之Promises

作者: 币来币往 | 来源:发表于2017-12-29 15:56 被阅读0次
Promises出世之前我们都是通过 events+回调函数来处理异步事件的

估计好多人都被一层一层嵌套的回调函数折磨的头疼。不信你看下面这个是什么鬼

asyncOne('one', () => {
  ...
  asyncTwo('two', () => {
    ...
    asyncThree('three', () => {
      ...
      asyncFour('four', () => {
      });
    });
  });
});

这样一层一层的嵌套起来,代码读起来,维护起来都很难。

明明监听了啊,怎么没调用?

var img1 = document.querySelector('.img-1');

img1.addEventListener('load', function() {
  // woo yey image loaded
});

img1.addEventListener('error', function() {
  // argh everything's broken
});

events的可能带来的问题就是,事件已经发生了你才开始监听,这时候你是永远等不到的。
events适用于监听会多次发生的事件,例如鼠标,键盘操作。对于这种事件我们不需要关注我们开始监听它之前究竟发生了什么。

终于等到你--Promise

在ES6 javaScript 推出了Promise
Promise正如它的名字所示,就是承诺异步函数会在某个时间点执行完成

img1.ready().then(function() { //img1.ready() 返回一个Promise
  // loaded
}, function() {
  // failed
});

// and…
Promise.all([img1.ready(), img2.ready()]).then(function() {
  // all loaded
}, function() {
  // one or more failed
});

promise和events的不同是,Promise只会发生一次,在发生之后你再调callback函数,仍然可以拿到之前执行的结果。
Promise的精髓就是,我们关注的是结果,而不关心具体事件发生的时间

Promise 有四个状态
  • fulfilled -执行成功
  • rejected -执行失败
  • pending -正在执行
  • settled -已经执行完成(成功或失败)
创建promise
var promise = new Promise(function(resolve, reject) {
  // 异步代码执行…

  if (/* 执行成功 */) {
    resolve("Stuff worked!");
  }
  else {
    reject(Error("It broke"));
  }
});
The p

创建promise的时候需要一个回调函数作为参数,这个回调函数有两个参数resolve, reject也都是函数。当代码执行成功时调用resolve,失败时调用reject, 调用完resolve或者reject后执行结束,返回结果。
下面代码调用我们之前创建的promise

promise
.then(function(result) {
  console.log(result); // "Stuff worked!"
})
.catch(function(err) {
  console.log(err); // Error: "It broke"
});

promise执行成功后执行then方法,失败后执行catch方法

promise的方法
  • Promise.resolve(promise) ; 返回promise
  • Promise.resolve(thenable); 将thenable转成Promise
  • Promise.resolve(obj); promise执行成功返回obj
  • Promise.reject(obj); promise执行失败返回obj, obj instanceof Error
  • Promise.all(array); 数组中得所有元素都执行成功返回fulfilled,否则 rejects
  • Promise.race(array); 返回数组中执行最快的一个结果

相关文章

网友评论

    本文标题:JavaScript之Promises

    本文链接:https://www.haomeiwen.com/subject/wxrigxtx.html