使用promise进行编程有哪些好处?
将复杂的异步处理轻松地进行模式化
代码更清晰
异常处理更方便
代码链式操作
1. 构建promise对象
Pormise本质就是一个构造器
Promise类似于 XMLHttpRequest ,从构造函数 Promise 来创建一个新建新 promise 对 象作为接口。
要想创建一个promise对象、可以使用 new 来调用 Promise 的构造器来进行实例化。如下:
var promise = new Promise(function(resolve, reject) {
// 异步处理
// 处理结束后、调用resolve 或 reject
});
promise的链式调用
/每一次执行.then都会返回一个新的promise,初始状态是pending
三个状态:
padding
fulfilled
rejected
如何改变状态,在执行器中有两个参数,一个是resolve,一个是reject
resolve 本质也是一个函数 resolve() padding ----> fulfilled
reject 本质也是一个函数 reject() padding ----> rejected
返回的新的promise也可以.then,这样就一直可以.then下去,这叫then链机制
/*let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("ok")
},2000)
})
let p2 = p1.then(result=>{
console.log(result)
},reason=>{
console.log(reason)
})
let p3 = p2.then();
let p4 = p3.then()
console.log(p2)*/
/*let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("包包")
},2000)
})
let p2 = p1.then(result=>{ // 如果p1.then中的某个方法返回了一个新的promise,p2是成功还是失败要看这个新的promise状态
console.log(result); // 包包
return Promise.reject("没钱"); // 新的promise是失败状态 意味着p2是失败状态
},reason=>{
console.log(reason);
})
p2.then((result)=>{
console.log(result)
},(reason)=>{
console.log("----"+reason); // 没钱
})*/