promise知识点小结

断断续续学习es6也有一段时间了,趁着开学空闲对知识点作一些小结。javascript

为何使用promise

谈到Promise,咱们知道,这是社区较理想的异步编程解决方案。想要掌握promise,咱们首先要知道其提出缘由。promise的提出很好的解决了多个相互依赖的代码之间的嵌套问题,好比说C代码须要B代码的结果,B代码须要A代码的结果,用传统的方案,会出现层层嵌套的状况,不易维护。java

promise对象是什么

promise对象一共有三种状态es6

  • pending(进行中)
  • fulfilled(已成功)
  • rejected

promise对象有几种相关方法编程

let promise = new Promise((resolve,reject) => {
    //....
    resolve('2');
    

    //....
    //reject('4');
})

最简单建立对象的方法,就是为resolve和reject的状态分别传递参数,也就是成功后的信息或是失败时的提示,固然,不必定要两种状态同时都有。promise

then方法,接受两个参数,第一个为fulfilled状态下要进行的步骤,第二个参数可选,指的是rejected状态下执行的方法
固然,更推荐使用catch方法来定义错误状态下的方法,也和try...catch结构相似异步

promise
  .then((data) => { //cb
    // success
  })
  .catch((err) => {
    // error
  });

这个对象有几个特色,异步编程

1.好比状态一旦更改,就不会再发生变化,也就是说pending状态一旦转换成fulfuilled或rejected就再也不变化了。函数

let promise = new Promise((resolve,reject) => {

    resolve('2');
    reject('4');
})

好比上面的代码,promise在进入fulfulled状态后就再也不发生变化了,所以reject的操做是无效的。学习

2.好比promise对象建立中的代码是同步的,而then方法是异步的。ui

let promise = new Promise((resolve, reject) => {
    console.log('1');
    resolve('2');
  });
promise.then((resolve,reject) => {
    console.log(resolve);

})
console.log(3);

// 1 3 2

promise对象建立之后当即执行,故输出1,then方法为异步执行,被放入等待的实践队列,在本次事件循环结束时执行,故先打印3,最后打印2。
3.不会主动抛出错误
这一点比较特别,意味着咱们必须定义catch方法或then的第二个参数来获取错误,否则,错误没法被发现
4.chain 链式结构
then函数的能够接另外一个then函数,而then函数返回一个promise对象,所以,这一个promise对象就决定了执行后面的哪些方法

与promise相关的问题

then方法与settimeout
这一个问题很是典型,其实只要明白一点:settimeout在下一轮“事件循环”的时候开始执行,Promise.then()在本轮“事件循环”结束时执行。

setTimeout(function () {
    console.log('1');
}, 0);
  
Promise.resolve().then(function () {
    console.log('2');
});
console.log('3');

输出3 2 1

其实,这些方法,仍是要多使用,多练习,才能驾轻就熟

相关文章
相关标签/搜索