1. 程式人生 > 其它 >promise是什麼?有哪些狀態和引數?如何使用?

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.多個併發請求