Promise定义
古人云:“君子一诺千金”,这种“承诺将来会执行”的对象在JavaScript中称为Promise对象。
Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
常见异步编程方案
- 回调函数
- 事件监听
- 发布/订阅
- Promise对象
代码示列
new Promise(test).then(function (result) {
console.log('成功:' + result);
}).catch(function (reason) {
console.log('失败:' + reason);
});
Promise对象三种状态
- 未完成(pending)
- 已完成(fulfilled)
- 失败(rejected)
PromiseA与A+不同规范
- A+规范通过术语thenable来区分promise对象
- A+定义onFulfilled/onRejected必须是作为函数来调用,而且调用过程必须是异步的。
- A+严格定义了 then 方法链式调用时onFulfilled/onRejected的调用顺序
Promise的then方法
promiseObj.then(onFulfilled, onRejected)
onFulfilled = function(value){
return promiseObj2
}
onRejected = function(value){
return promiseObj2
}
Promise库
- bluebird (扩展了很多实用的方法)
- Q
- then.js
- es6-promise
- ypromise
- async
- native-promise-only
- ......
Promise.all 接收一个promise对象数组为参数
只有全部为resolve才会调用 通常会用来处理 多个并行异步操作
const p1 = new Promise((resolve, reject) => {
resolve(1111);
});
const p2 = new Promise((resolve, reject) => {
resolve(2222);
});
const p3 = new Promise((resolve, reject) => {
reject(3333);
});
Promise.all([p1, p2, p3]).then(data => {
console.log(data); // [1, 2, 3] //结果顺序和promise实例数组顺序是一致的
}, error => {
console.log(error);
});