1.什么是promise?
Promise 是异步编程的一种解决方案。可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。
从语法上讲,promise是一个对象,从它可以获取异步操作的消息;
从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。
2.为什么会有promise
一般来说我们会碰到的回调嵌套都不会很多,一般就一到两级,但是某些情况下,回调嵌套很多时,代码就会非常繁琐,会给我们的编程带来很多的麻烦,这种情况俗称——回调地狱。
3.promise的使用相关
promise有三种状态: pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
promise的创建
var promise = new Promise(function(resolve, reject) {
// 异步处理
// 处理结束后、调用resolve 或 reject
});
链式操作
.then() 成功
.catch() 失败
.race() 有一个返回就继续
.all() 所有的返回才继续
4.promise的优缺点
优点: 有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。
缺点: 首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
5.实战
// 方法名
getLegend() {
return new Promise((resolve, reject) =>{
const params = {
output: 'extend',
itemids: '1111'
}
this.$util.axios({
method: '/getHost',
params
}).then(res => {
resolve(res)
}).catch(err => {
reject(err)
})
})
}
// 使用
this.getLegend().then(res => {
console.log(res)
})