pomise 是什么
- 异步编程 的一种解决方案,比传统的方案(回调函数和事件)更加的合理和强大
- 好处 异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数
- promise可以解决异步的问题,本身不能说promise是异步的
以同步的方式去管理异步
pomise 使用
创造Promise实例时,必须传入一个函数作为参数
new Promise(() => {});
new Promise(); // 报错
复制代码
pomise 参数函数解析
该函数可以接收另外两个由JavaScript引擎提供的函数,resolve和reject。
函数作用:
- resolve——将Promise对象的状态从pending变为resolved,将异步操作的结果,作为参数传递出去
- reject——将Promise对象的状态从pending变为rejected,将异步操作报出的错误,作为参数传递出去
let promise = new Promise((resolve, reject) => {
// do something
if (true) {
// 将参数返回,供then方法使用
resolve("value");
} else {
// 将参数返回,供then方法使用
reject("error");
}
});
复制代码
Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。
promise.then(
value => {
// resolved时调用,value为resolve函数返回的参数
console.log(value);
},
err => {
// rejected时调用,err为reject函数返回的参数
console.log(err);
}
);
复制代码
当then方法只有一个函数参数时,此时为resolved状态的回调方法
promise.then(value => {
// 只有状态为resolved时才能调用,如果返回的是rejected状态,则报错 Uncaught (in promise) error
console.log(value);
});
复制代码
只有当promise的状态变为resolved或者rejected时,then方法才会被调用
Promise 新建后就会立即执行,并且调用resolve或reject后不会终结 Promise的参数函数的执行。
let promise = new Promise(function(resolve) {
console.log("Promise");
resolve();
console.log("!!!")
});
promise.then(function() {
console.log("resolved.");
});
console.log("Hi!");
// Promise
// !!!
// Hi!
// resolved
复制代码
pomise 特点(三种状态)
- 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、resolved(已成功)和 rejected(已失败)
- 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从 pending 变为 resolved 和从 pending 变为 rejected
- promise内部发生错误,不会影响到外部程序的执行。