es6入门笔记之promise

ES6之Promise

promise是异步编程的一个解决方案

Promise是一个容器,保存着未来才会结束的事件

Promise对象

对象状态不受外界影响

三种状态:pending(进行中),fulfilled(已成功),rejected(已失败)

当前的状态由操作结果决定,其他操作无法影响这个状态

Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected

 

两种情况发生了,状态就会凝固,状态不会改变,如果改变已经发生了,再对Promise对象添加回调函数,也会立即得到这个结果

 

Proise缺点

一旦新建就会立即执行无法取消

如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)

 

 

promise用法

const promise = new Promise(function(resolve,reject){

if(true){

resolve(value)} //pending=>fullfilled

}) else {

reject(error) //pending=>reject

}

 

一般来说,调用resolvereject以后,Promise 的使命就完成了,后继操作应该放到then方法里面

 

then方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行

new Promise((resolve, reject) => {

  resolve(1);

  console.log(2);}).then(r => {

  console.log(r);});

// 2

// 1

resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务,所以先打印2,再打印1

 

Promise实例是支持链式编程的,因为在then方法是存在原型对象promise.prototype上的

new promise(function(resolve, reject) {

}).then(function(value) {

})

promise.prototype.then(resolve回调,‘rejecte回调(可选))//返回一个新的promise实例

当发生错误时,可以使用catch方法中指定的回调函数捕获

const promise = new Promise(function(resolve, reject) {

  throw new Error('test');});

promise.catch(function(error) {

  console.log(error);});

Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个catch语句捕获

一般不要在then方法里面定义reject状态的回调函数,用catch来捕获

promise(function(function(val) {

},function(err){

})).then(null,(err)=> {

cnsole.log(err)})等同于

》》》》

promise(function(function(val) {

},function(err){

})).catch((err)=> {

cnsole.log(err)})

猜你喜欢

转载自blog.csdn.net/hamsterknight/article/details/81193891