概述
- 是异步编程的一种解决方案。
- 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
resolve:成功
reject:失败
const p1 = new Promise(function(resolve,reject){
resolve('success1');
resolve('success2');
});
const p2 = new Promise(function(resolve,reject){
resolve('success3');
reject('reject');
});
p1.then(function(value){
console.log(value); // success1
});
p2.then(function(value){
console.log(value); // success3
});
then 方法
- hen 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。
- 在 JavaScript 事件队列的当前运行完成之前,回调函数永远不会被调用。
- 简便的 Promise 链式编程最好保持扁平化,不要嵌套 Promise。
const p = new Promise(function(resolve,reject){
resolve('success');
});
p.then(function(value){
console.log(value);
});
console.log('first');
// first
// success
通过 .then 形式添加的回调函数,不论什么时候,都会被调用。
const p = new Promise(function(resolve,reject){
resolve(1);
}).then(function(value){ // 第一个then // 1
console.log(value);
return value * 2;
}).then(function(value){ // 第二个then // 2
console.log(value);
}).then(function(value){ // 第三个then // undefined
console.log(value);
return Promise.resolve('resolve');
}).then(function(value){ // 第四个then // resolve
console.log(value);
return Promise.reject('reject');
})
.then(
function(value){
// 第五个then //reject:reject !!!这里不会打印,因为上一个then方法返回的是一个reject状态的promise
console.log('resolve:' + value);
},
function(err) {
// 此行会打印, 因第五个than只能接受 resolve状态的promise, 而第四个than返回的是reject状态的promise
// 所以会被本行 err 捕获
console.log('reject:' + err);
}
);