promise是什麼?有哪些狀態和引數?如何使用?
技術標籤:promisejavascript
名詞約定
一般來講,有以下的名詞約定:
promise(首字母小寫)物件指的是“Promise例項物件”
Promise首字母大寫且單數形式,表示“Promise建構函式”
Promises首字母大寫且複數形式,用於指代“Promises規範”
promise是什麼?
是非同步佇列的一種解決方案
有哪些狀態和引數?
promise有三種狀態
1.pending【待定】初始狀態
2.fulfilled(否否得)【實現】操作成功
3.rejected (瑞傑巔特)【被否決】操作失敗
改變他們的狀態,如果從pending狀態變成fulfilled狀態或rejected狀態,成功回撥fulfilled,失敗回撥rejected,then(接受成功資料) catch(接受失敗資料)
resolve (瑞肉服)的作用是,將promise從未完成變為完成,非同步操作成功時呼叫,結果傳遞出去
reject (瑞街可的)作用是,將promise狀態從未完成變為完成,並將非同步操作的錯誤,傳遞出去
all()方法:
Promise 的 all 方法提供了並行執行非同步操作的能力,並且在所有非同步操作執行完後才執行回撥。
比如下面程式碼,兩個個非同步操作是並行執行的,等到它們都執行完後才會進到 then 裡面。同時 all 會把所有非同步操作的結果放進一個數組中傳給 then。
//買作業本
function cutUp(){
console. log('挑作業本');
var p = new Promise(function(resolve, reject){ //做一些非同步操作
setTimeout(function(){
console.log('挑好購買作業本');
resolve('新的作業本');
}, 1000);
});
return p;
}
//買筆
function boil(){
console.log('挑筆芯');
var p = new Promise(function(resolve, reject){ //做一些非同步操作
setTimeout(function(){
console.log('挑好購買筆芯');
resolve('新的筆芯');
}, 1000);
});
return p;
}
Promise.all([cutUp(),boil()]).then(function(results){
console.log("寫作業的工具都買好了");
console.log(results);
});
race()方法:
race 按字面解釋,就是賽跑的意思。race 的用法與 all 一樣,只不過 all 是等所有非同步操作都執行完畢後才執行 then 回撥。而 race 的話只要有一個非同步操作執行完畢,就立刻執行 then 回撥。
注意:其它沒有執行完畢的非同步操作仍然會繼續執行,而不是停止。
這裡我們將上面樣例的 all 改成 race
Promise.race([cutUp(), boil()]).then(function(results){
console.log("哈哈,我先買好啦");
console.log(results);
});
如何使用?
使用場景:promise封裝api介面
Promise進行非同步操作
解決問題:1.回撥多域問題2.多個併發請求