Promise
promise就是为了解决多层的函数、方法的嵌套调用而存在的。
简单粗暴地理解就是:它就是把一层一层向内嵌套调用的方法给拉成一串连续调用的方法。每个嵌套调用的方法,都向调用者返回this,也就是返回自身,然后带着上一次调用的结果进入下一次嵌套调用的环节。
伪代码:
// 普通的js嵌套函数
function foo() {
function aa() {
function bb() {
function cc() {
// ...一层一层不断向下嵌套
}
}
}
}
// promise 的实现思路
var abc = new 一个东西
abc.foo()
// abc先调用了foo foo方法执行之后带着执行的结果,返回this
abc.aa()
// abc再调用aa aa方法执行之后带着执行的结果,返回this
abc.cc()
// abc带着上一次运行的结果,接着再调用cc()
// promise连续调用自己上一轮的运行结果 用的是 .then()方法
abc.then().then().then() //不断向下
在es6中,Promise正式成为了JS原生的内容
promise的含义:
它就是用来操作一个异步操作的结果的方法。
new Promise(
/* 执行的JS, 这其实是一个回调函数*/
function(resolve, reject) {
if (/* success */) {
// ...执行代码
resolve();
} else { /* fail */
// ...执行代码
reject();
}
}
);
对于Promise对象来说,它也有三种状态:
1、pending
初始状态,也称为未定状态,就是初始化Promise时,调用executor执行器函数后的状态。
2、fulfilled
完成状态,意味着异步操作成功。
3、rejected
失败状态,意味着异步操作失败。
状态转化是单向的,不可逆转,已经确定的状态无法转回初始状态。
promise
实例生成以后,可以用then
方法分别指定 resolved
状态和 rejected
状态的回调函数。
promise.then(function(value){
// success
},function(error){
// failure
})
// then 方法可以接受两个回调函数作为参数。
//第一个回调函数是 promise对象的状态变为resolved时调用,
//第二个回调函数是Promise对象的状态变为rejected时调用。
promise新建后就会立即执行。
let promise = new Promise(function(resolve, reject) {
console.log('Promise');
resolve();
});
promise.then(function() {
console.log('resolved.');
});
console.log('Hi!');
// Promise
// Hi!
// resolved
Promise 新建后立即执行,所以首先输出的是Promise
;然后,then
方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行,所以resolved
最后输出。