promise是什么呢?一个构造函数,自身的方法有all,reject,resolve这么几个方法,原型上面有then,catch等方法.
1.他的两个特性
(1) 对象的状态不受外界影响。Promise是一个异步的操作,本身有三种状态 pending(进行中),fulfilled(已成功)和rejected(已失败).只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态.
(2)一旦改变状态,就不会再改变.比如你定义了一个Promise, 状态为fulfilled 你就会then()到成功的结果.再catch()也拿不到失败的结果了
所以我们用Promise的时候一般是包在一个函数中,在需要的时候去运行这个函数,如:
function goAsync(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('执行完成');
resolve('成功');
}, 1000);
});
return p;
}
goAsync()
然后
goAsync().then(function(data){
console.log(data)
})
然后他可以做链式操作
同样定义一个Promise
function doSomething(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('正在执行');
resolve('成功2');
}, 1000);
});
return p;
}
goAsync().then(function(data){
console.log(data)
return doSomething()//这里执行下一条一定要return
}).then(function(data){
console.log(data)
})
all的用法
Promise的all方法提供了并行执行异步操作的功能,并在所有异步执行完成回调一个数组.
race的用法
race在调用时跟all类似,都是数组加载异步,但是区别就在于race是哪个异步操作快返回哪个;
我重新定义以下deSomething()为2000ms