自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何中止一個 Promise 呢?一個有意思的問題

開發(fā) 前端
我們在工作中都會使用到 Promise.race這個方法去判斷一個請求有沒有超時,那同理,可不可以用 Promise.race 來進行中止 Promise 的操作呢?

前言

最近看到一道大廠的面試題,我覺得這道題不錯,能考驗到大家的 Promise 基礎。題目如下~

看到這道題你們會怎么去回答呢?就比如有以下的一個 Promise ,我們要如何去中止他呢?

用變量去中斷?

很多人會第一時間想到,使用一個變量去控制要不要中止這個 Promise:

但是你們覺得這樣是對的嗎?其實這樣并不是真正的中止,因為我們只是限制了 resolve 的執(zhí)行,但是 setTimeout 還是走完了,所以輸出了 請求到數(shù)據(jù):

而真正的中止,肯定是把 setTimeout 也中止掉,所以需要改改:

但是可以看到,新增一個標識變量,非常的繁瑣,況且如果有多個 Promise,那就得要有多個標識變量,非常麻煩,所以換一種方式。

Promise.race?

我們在工作中都會使用到 Promise.race這個方法去判斷一個請求有沒有超時,那同理,可不可以用 Promise.race 來進行中止 Promise 的操作呢?

可以看到,這個中止也不是真的中止,也只是限制了 resolve 的執(zhí)行,而不是把 setTimeout 也給中斷了~

CancelToken

接下來是紅寶書上的做法,堪稱經(jīng)典,不用使用任何全局的標識變量,也能做到中止 Promise:

這種做法的好處是:

  • 不需要設置全局的標識變量
  • 多個請求并發(fā)也可以區(qū)別取消

比如我多次執(zhí)行的話,想取消哪次就取消哪次,因為每次的 CancelToken實例都是新的!??!

責任編輯:趙寧寧 來源: 前端之神
相關推薦

2020-12-12 13:50:16

云開發(fā)

2021-01-27 13:54:05

開發(fā)云原生工具

2018-06-24 16:39:28

Tomcat異常線程

2023-05-15 09:16:18

CSSCSS Mask

2015-03-12 10:46:30

代碼代碼犯罪

2024-03-18 08:14:07

SpringDAOAppConfig

2009-08-26 17:53:31

C# DropDown

2022-03-21 10:21:50

jQuery代碼模式

2023-11-21 21:59:50

c++接口

2020-03-10 14:59:16

oracle數(shù)據(jù)庫監(jiān)聽異常

2022-05-20 07:36:02

LiveTerm工具

2020-08-03 08:30:00

JSCSS排序

2020-09-24 11:46:03

Promise

2012-05-22 10:12:59

jQuery

2021-04-27 08:31:37

Promisereject信息

2021-04-28 08:21:21

Promise.any服務器場景

2021-02-20 16:01:26

Github前端開發(fā)

2021-03-25 06:12:55

SVG 濾鏡CSS

2015-04-23 16:21:23

2021-04-23 07:51:56

CSS Container Q Chrome
點贊
收藏

51CTO技術棧公眾號