文章目录
- ES6新增的一种异步编程的解决方案,比传统的回调函数和事件更加的合理和强大。通过
Promise
可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。Promise
可以解决异步的问题,但不能说Promise是异步的
特点
- 对象的状态不受外界影响。
Promise
对象代表一个异步操作,有三种状态: pending
——进行中resolved
——已成功rejected
——已失败- 一旦状态改变,就不会再发生变化,任何时候都可以得到这个结果。
Promise
对象状态的改变只有两种可能: pending
——resolved,
pending
——rejected,
Promise
内部发生错误,不会影响到外部程序的执行。Promise
一旦执行则无法取消:- 一旦创建就会立即执行,无法中途取消(缺点1)
- 如果不设置回调函数,
Promise
内部抛出的错误将不会反应到外部(缺点2) - 当处于
pending
状态时,无法得知目前进展到哪一阶段,即无法预测是刚刚开始还是即将完成(缺点3)
(
用法
创建Promise
实例时,必须传入一个函数作为参数:
new Promise(() => {})
示例:该函数可以接收另外两个由JavaScript引擎提供的函数,resolve
和reject
:
resolve
——将Promise
对象的状态从pending
变为resolved
,将异步操作的结果作为参数传递出去reject
——将Promise
对象的状态从pending
变为rejected
,将异步操作报出的错误作为参数传递出去- (此处我们用定时器来模拟异步请求)()
- 需要注意的是 此处resolve 成功和 reject 失败 状态是由我们自己人为决定的
const p = new Promise((resolve, rejected) => {
setTimeout(() => {
// resolve("成功了 奖励你一个女朋友");
rejected("失败了 罚你去西伯利亚喂鸡子");
}, 1000);
});
p.then((res) => {
//成功时执行的输出
console.log(res);
}, (res) => {
//失败时执行的输出
console.log(res);
})
总结
promise解决异步任务向外传值的问题,解决了代码报错导致无法继续运行的弊端,当失败时会自动输出一个由人为规定的值来作为提示。