日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-05-20 08:53:02 222觀看
導讀前言最近看到一道大廠的面試題,我覺得這道題不錯,能考驗到大家的 Promise 基礎。題目如下~看到這道題你們會怎么去回答呢?就比如有以下的一個 Promise ,我們要如何去中止他呢?用變量去中斷?很多人會第一時間想到,使用一個變

前言

最近看到一道大廠的面試題,我覺得這道題不錯,能考驗到大家的 Promise 基礎。題目如下~WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

看到這道題你們會怎么去回答呢?就比如有以下的一個 Promise ,我們要如何去中止他呢?WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

用變量去中斷?

很多人會第一時間想到,使用一個變量去控制要不要中止這個 Promise:WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

但是你們覺得這樣是對的嗎?其實這樣并不是真正的中止,因為我們只是限制了 resolve 的執行,但是 setTimeout 還是走完了,所以輸出了 請求到數據:WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

而真正的中止,肯定是把 setTimeout 也中止掉,所以需要改改:WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

但是可以看到,新增一個標識變量,非常的繁瑣,況且如果有多個 Promise,那就得要有多個標識變量,非常麻煩,所以換一種方式。WE228資訊網——每日最新資訊28at.com

Promise.race?

我們在工作中都會使用到 Promise.race這個方法去判斷一個請求有沒有超時,那同理,可不可以用 Promise.race 來進行中止 Promise 的操作呢?WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

可以看到,這個中止也不是真的中止,也只是限制了 resolve 的執行,而不是把 setTimeout 也給中斷了~WE228資訊網——每日最新資訊28at.com

CancelToken

接下來是紅寶書上的做法,堪稱經典,不用使用任何全局的標識變量,也能做到中止 Promise:WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

這種做法的好處是:WE228資訊網——每日最新資訊28at.com

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

比如我多次執行的話,想取消哪次就取消哪次,因為每次的 CancelToken實例都是新的!!!WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

WE228資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-89229-0.html如何中止一個 Promise 呢?一個有意思的問題

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何在 ASP.NET Core 優雅地處理多接口實現,你學會了嗎?

下一篇: Python 代碼格式化的十個工具與技巧

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 南漳县| 开封县| 南京市| 云阳县| 通辽市| 吐鲁番市| 永靖县| 成都市| 潜山县| 礼泉县| 天柱县| 随州市| 台北县| 芜湖县| 黔江区| 礼泉县| 博兴县| 汕头市| 大安市| 宜黄县| 马尔康县| 宁晋县| 安徽省| 庆云县| 巴彦淖尔市| 遂宁市| 阜阳市| 屯门区| 德阳市| 乌拉特中旗| 瑞金市| 准格尔旗| 芷江| 林州市| 馆陶县| 丹江口市| 镇雄县| 临桂县| 民和| 改则县| 牡丹江市|