Promise.race() 方法

admin發表於2019-07-25

關於Promise物件的基本介紹可以參閱JavaScript Promise 物件一章節。

Promise的靜態方法,將多個Promise物件包裝成一個新的Promise物件。

race翻譯成漢語具有"競賽"或者"賽跑"的意思,恰如其名,哪個Promise物件狀態改變的快。

方法返回的Promise物件的狀態就隨著對應的Promise物件狀態發生改變。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
p=Promise.race(iterable);

語法解析:

(1).iterable:必需,具有遍歷器介面的物件。

iterable中的元素是Promise物件,如果不是,需要用Promise.resolve()將其轉換為一個Promise物件。

只要iterable中的任意一個Promise物件狀態改變,那麼p物件狀態也會跟著改變。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let p1 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 500, "螞蟻部落一"); 
});
var p2 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 100, "螞蟻部落二"); 
});
  
Promise.race([p1, p2]).then(function(value) {
  console.log(value);
});

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/25/123415wawdyztoeogd5dd5.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).Promise.race() 方法引數是一個陣列,陣列元素是Promise物件。

(2).很明顯是p2的狀態首先發生變化,於是將"螞蟻部落二"傳遞給then的回撥函式。

(3).所以列印結果是"螞蟻部落二"。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let p1 = new Promise(function(resolve, reject) { 
    setTimeout(reject, 50, "螞蟻部落一"); 
});
var p2 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 100, "螞蟻部落二"); 
});
  
Promise.race([p1, p2]).then(function(value) {
  console.log(value);
},function(value){
  console.log(value);
});

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/25/123440ldn1wn00aa9a000n.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).Promise.race() 方法引數是一個陣列,陣列元素是Promise物件。

(2).很明顯是p1的狀態首先發生改變,變為rejected。

(3).於是會執行then的第二個回撥函式,並將"螞蟻部落一"作為引數傳遞給回撥函式。

(4).所以最終列印結果是"螞蟻部落一"。

相關文章