promise有俩个特点就:
1 对象的状态不受外界影响, 只有一步操作的结果决定状态其他操作不会影响这个状态
2 一旦状态改变就不会在变了,一般promise状态有俩中可能就是第一种就是从进行中变为成功,第二种就是从进行中变为失败
一般的用法就是如下用法
const promise = new Promise(function(resolve, reject){
If(异步操作成功)
resolve();
else
reject();
})
但是更长用的写法是用then,如下
var promise = new Promise(function(resolve, reject){
console.log('success');
resolve('hello world');
});
promise.then(function(msg){
console.log(msg); //这个msg就是在resolve函数中传进来的参数
}, function(){
});
以上的then()函数中传进来的俩个函数,一个函数是promise变为成功时调用第一个,promise状态变为失败时调用第二个函数
*****一个重要的问题******
就是在项目中运用promise时应该注意就是因为promise创建就会立即执行,所以首先new Promise()中的一些语句会被执行,但是因为promise.then()是异步操作,所以会等一些其他的同步操作结束后then中的函数才会被执行
******第二个重要的问题******
resolve()中的参数不仅可以传递一个参数,还可以是另一个promise,例如一个promise是p1,另一个promise是p2,在第二个new Promise()中有这么一条语句就是resolve(p1),那么这个时候就是p1的状态决定着p2的状态
.then可以采用链式的方法以同步的方法来写,为什么then可以采用链式,是因为.then方法返回的是一个promise,后一个then要看前一个then返回的状态
.catch方法就是promise变为失败时调用的,promise对象的错误具有冒泡的性质,会一直向后传播,直到被捕获为止。
.finally方法不管promise执行的成功或者失败,它都会执行
promise.all()它的用法就是var p = Promise.all(p1, p2, p3)只有三个promise都变为成功时,p的状态才能变为成功,如果有一个为reject那么all()返回第一个reject的promise实例
Promise.resolve()将现有对象转为Promise对象
网友评论