Promise 的深度学习

1.Promise 是什么?

Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大.Promise ,简单说就是一个容器,里面保存着某个未来才回结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。
Promise 对象的状态不受外界影响.ES6规定,Promise对象是一个构造函数,用来生成Promise实例.
有all、reject、resolve这几个眼熟的方法,原型上有then、catch方法,

三种状态:

pending:进行中
fulfilled :已经成功
rejected 已经失败

2.Promise对象的状态改变,只有两种可能:

从pending变为fulfilled
从pending变为rejected。
这两种情况只要发生,状态就凝固了,不会再变了,这时就称为resolved(已定型)

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
Promise 实例生成以后,可以用then 方法分别指定resolved状态和rejected状态的回调函数。
promise.then(function(value){
//success
},function(error){
//failure
});

3. 封装一个

function runAsync(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('执行完成');
resolve('数据');
}, 2000);
});
return p;
}
runAsync()
而Promise的优势在于,可以在then方法中继续写Promise对象并返回,然后继续调用then来进行回调操作。从表面上看,Promise只是能够简化层层回调的写法,而实质上,Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够及时调用,它比传递callback函数要简单、灵活的多。
done、finally、success、fail等这些并不在Promise标准中,而是我们自己实现的语法糖。

参考文章:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html 《大白话讲解promise》

原文地址:https://www.cnblogs.com/panax/p/9448232.html