JS中异步编程解决方案Promise
01. 基础简介
Promise
是一个对象,它代表了一个异步操作的最终完成或者失败
实例方法:catch、then、finally
在prototype属性上,根据构造函数的知识,我们知道实例都可以访问到构造函数原型上的方法。
对象方法:race、all、reject、resolve
02. Promise方法
实例方法:
对象方法:
03. 基本用法
Promise是一个构造函数,就可以new出一个实例。
Promise的基本用法就是在构造函数中传递函数,在函数中传递resolve和reject方法作为成功和失败后的处理方法,然后then方法处理结果。
方式一:
在then的第一个方法里处理成功的结果,在then的第二个方法里处理失败的结果
var p = new Promise(function (resolve, reject) {
// 这里用于实现异步任务
});
p.then(function (data) {
// 捕获异步任务正确结果
}, function (info) {
// 捕获异步任务异常信息
});
方式二:
在then里处理成功的结果,在catch里处理失败的结果
var p = new Promise(function (resolve, reject) {
// 异步任务
});
p.then(function(data){
// 捕获异步任务正确结果
})
.catch(function(data){
// 捕获异步任务异常信息
})
.finally(function(){
// 成功和失败都会执行
});
主要作用就是解决异步回调问题,()
传统处理异步的方式是通过嵌套实现的:
$.ajax({
url: 'xxx1',
success: function (data) {
$.ajax({
url: 'xxx2',
success: function (data) {
$.ajax({
url: 'xxx3',
success: function (data) {
console.log(data)
}
});
}
});
}
});
我们用Promise解决,封装一个ajax请求
function queryAjax(url) {
var p = new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState != 4) return;
if (xhr.readyState == 4 && xhr.status == 200) {
resolve(xhr.responseText);
} else {
reject('err');
}
};
xhr.open('get', url);
xhr.send(null);
});
return p;
}
queryAjax('xxx1')
.then(function (data) {
return queryData('xxx2');
})
.then(function (data) {
return queryData('xxx3');
})
.then(function (data) {
console.log(data)
});
console.log('1');
new Promise(function (resolve, reject) {
console.log('2')
})
console.log('3');
执行的顺序依次是1,2,3;
四、race和all区别
Promise.race([p1,p2,p3]).then(function(result){
console.log(result)
})
result只能得到最先结束异步任务的对象的结果
2. all
Promise.all([p1,p2,p3]).then(function(result){
console.log(result)
})
result可以得到所有异步对象的结果
五、Promise 三个状态
同一时间只能存在一种状态,且状态不可逆。
状态变化只能从pending到 resolved,或者pending 到 rejected。
六、Promise缺点
无法取消Promise,一旦创建就会立马执行,不能中途取消。
Promise的状态分为了三种,但是无法得知具体详细状态,例如:目前状态是在pending刚开始还是要结束。
简书https://www.jianshu.com/p/dc61ea153874
mdn
◆ ◆ ◆
为什么我们本能地怕蛇而不是枪?
把蛇或蛇的图片拿出来会惹得成年的新几内亚人发笑。蛇根本吓不倒他。
我们的大脑是由基因构筑的,而这些基因中不存在金钱世界的优胜者。在往身上增加脂肪这方面,我们拥有强大的本能,而关心金钱的本能还没来得及演化出来。
-- [美]特里·伯纳姆 [美]杰伊·费伦《本能:为什么我们管不住自己?》
END
扫描二维码更精彩
关注有惊喜