偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何中止一個(gè) Promise 呢?一個(gè)有意思的問題

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

前言

最近看到一道大廠的面試題,我覺得這道題不錯(cuò),能考驗(yàn)到大家的 Promise 基礎(chǔ)。題目如下~

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

用變量去中斷?

很多人會(huì)第一時(shí)間想到,使用一個(gè)變量去控制要不要中止這個(gè) Promise:

但是你們覺得這樣是對的嗎?其實(shí)這樣并不是真正的中止,因?yàn)槲覀冎皇窍拗屏?nbsp;resolve 的執(zhí)行,但是 setTimeout 還是走完了,所以輸出了 請求到數(shù)據(jù):

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

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

Promise.race?

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

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

CancelToken

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

這種做法的好處是:

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

比如我多次執(zhí)行的話,想取消哪次就取消哪次,因?yàn)槊看蔚?nbsp;CancelToken實(shí)例都是新的?。?!

責(zé)任編輯:趙寧寧 來源: 前端之神
相關(guān)推薦

2018-06-24 16:39:28

Tomcat異常線程

2020-12-12 13:50:16

云開發(fā)

2021-01-27 13:54:05

開發(fā)云原生工具

2023-05-15 09:16:18

CSSCSS Mask

2015-03-12 10:46:30

代碼代碼犯罪

2009-08-26 17:53:31

C# DropDown

2024-03-18 08:14:07

SpringDAOAppConfig

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工具

2025-06-13 09:40:45

2020-09-24 11:46:03

Promise

2020-08-03 08:30:00

JSCSS排序

2012-05-22 10:12:59

jQuery

2021-04-28 08:21:21

Promise.any服務(wù)器場景

2021-04-27 08:31:37

Promisereject信息

2021-02-20 16:01:26

Github前端開發(fā)

2015-04-23 16:21:23

2021-03-25 06:12:55

SVG 濾鏡CSS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號