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