6.ES6-Promise对象
文章目录
- Promise对象
- 一.Promise
- 二.基本用法
- 三.then()
- 参考文档
Promise对象
一.Promise
Promise
简单来说就是一个容器,里边保存着某个未来才会结束的事件(通常是一个异步操作)的结果.Promise
对象有以下两个特点- 对象的状态不受外界影响.
Promise
对象代表一个异步操作, 有三种状态:Pending
(进行中)、Resolved
(已完成,又称Fulfilled)和Rejected
(已失败). 只有异步操作的结果才能决定当前是那种状态,任何其他操作都无法改变这个状态. - 一旦状态改变就不会再变,任何时候都可以得到这个结果.
Promise
对象的状态改变,只有两种可能: 从Pending
变成Resolved
和从Pending
变为Rejected
. 只要这两种情况发生, 状态就凝固了,不会再变了, 会一直保持这个结果.
- 对象的状态不受外界影响.
二.基本用法
ES6规定,Promise对象是一个构造函数, 用来生成Promise实例.
var promise = new Promise(function(resolve,reject){
//...
if(/* 异步操作成功 */){
resolve(value);
}else {
reject(error);
}
})
Promise实例生成以后,可以用
then
方法分别指定Resolved
状态和Reject
状态的回调函数.promise.then(function(value){
//success
},function(error){
//failure
})
then
方法可以接受两个回调函数作为参数. 第一个回调函数是Promise对象的状态变为Resolved时调用,第二个回调函数是Promise对象的状态变为Reject时调用. 其中, 第二个函数是可选的, 不一定要提供. 这两个函数都接受Promise对象传出的值作为参数.Promise新建之后会立即执行
let promise = new Promise(function(resolve,reject){
console.log('Pormise');
resolve();
});
promise.then(function(){
console.log('Resolved');
});
console.log('Hi!');
//Promise
//Hi!
//Resolved
Promise新建后立即执行,所以首先输出的是”Promise”. 然后,
then
方法指定的回调函数, 将在当前脚本所有同步任务执行完才会执行, 所以”Resolved”最后输出.- 如果调用
resolve
函数和reject
函数时带有参数,那么它们的参数会被传递给回调函数. - 将需要异步执行的任务添加到Promise容器中
- 通过then方法完成promise附件任务的添加,
- promise作用:实现异步执行的任务具备同步执行的顺序
三.then()
- Promise实例具有
then
方法,也就是说,then
方法是定义在原型对象Promise.prototype上的。它的作用是为了Promise实例添加状态改变时的回调函数. then方法返回的是一个新的Promise实例(注意, 不是原来的那个promise实例). 因此可以采用链式写法, 即then方法后边再调用另一个then方法.
getJSON("/posts.json").then(function(json){
return json.post;
}).then(function(post){
//...
});
上面的then方法,依次指定了两个回调函数. 第一个回调函数完成以后, 会将返回结果作为参数, 传入第二个回调函数.
参考文档
ES6官方文档
还没有评论,来说两句吧...