成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 JavaScript 中取消Promises?

開發 前端
JavaScript 中的 Promises 是管理異步操作的天賜之物,它提供了一種處理成功和失敗的簡潔方法。

JavaScript 中的 Promises 是管理異步操作的天賜之物,它提供了一種處理成功和失敗的簡潔方法。

但有一個微妙的挑戰:從設計上講,Promises 擁抱了其異步性質,一旦啟動就無法直接停止。

在我們需要更精細控制的情況下,這可能會成為障礙,這時,我們就需要設計可取消的 Promises!

原始 Promise 的問題

想象一下獲取大文件或發出網絡請求。如果用戶決定在中途取消,該怎么辦?使用標準 Promise,會陷入困境。它會在后臺繼續運行,可能會浪費資源。

我們的目標:優雅取消

我們希望為我們的 Promise 提供以下功能:

  • 取消:發起取消請求。
  • 指示狀態:了解 Promise 是否已成功取消或已解決。

TaskCancelable 解決方案

以下是我們可以實現 TaskCancelable 函數來增強我們的 Promise 的方法:

export const TaskCancelable = (task) => {
  let _reject;
  let isCancel = false;
  const _status = Symbol("cancel");
  const cancelP = new Promise((resolve, reject) => {
    _reject = reject;
  });
  const p = Promise.race([task, cancelP]);


  p.catch((reason) => {
    if (reason === _status) { 
      isCancel = true;
    }
  });
  p.cancel = () => {
    _reject(_status);
    return p;
  };
  p.isCancel = () => {
    return isCancel;
  };
  return p;
};

解釋 

Symbol("cancel"):我們使用 Symbol 來創建取消的唯一標識符。這可以防止與其他潛在錯誤發生沖突。

Promise.race([task, cancelP]):奇跡就在這里發生!我們將原始任務 Promise 與 cancelP Promise 進行比賽。先解決或先拒絕的一方獲勝。

p.cancel():此自定義函數在調用時會拒絕 cancelP Promise,從而有效觸發取消。

p.isCancel():這個方便的方法讓我們可以檢查 Promise 是否確實被取消。

實際示例 

讓我們看看如何使用 TaskCancelable:

// Simulate a long-running task
const longTask = new Promise((resolve) => {
  setTimeout(() => {
    resolve("Task complete!");
  }, 3000);
});


const cancellableTask = TaskCancelable(longTask);
// Cancel after 1 second
setTimeout(() => {
  cancellableTask.cancel(); 
}, 1000); 
cancellableTask
  .then((result) => console.log("Success:", result)) // Won't run
  .catch(() => {
    if (cancellableTask.isCancel()) {
      console.log("Task was cancelled!"); 
    } else {
      console.log("Task failed for another reason"); 
    }
  });

結論

通過創建可取消的 Promises,我們在管理異步操作方面獲得了更大的靈活性。這種模式對于響應式用戶界面和資源密集型任務至關重要,因為取消是這些任務的關鍵。

責任編輯:華軒 來源: web前端開發
相關推薦

2014-04-21 10:14:52

PromisesJavaScript

2022-01-21 10:58:39

JavaScriptGolangPython

2021-03-11 23:43:20

JavaScript數組開發

2021-03-18 10:45:02

JavaScript數組運算符

2011-03-21 12:41:41

JavaScript

2022-03-15 07:55:09

JavaScript線性儀表圖開發

2018-10-11 09:40:53

前端JavaScript編程語言

2024-04-11 08:30:05

JavaScript數組函數

2020-11-26 08:12:24

JavaScript對象數組

2022-07-07 07:22:01

瀏覽器JavaScript工具

2015-07-06 09:59:56

JavaScript私有成員

2022-09-12 23:53:53

JavaScript條件判斷開發

2021-03-29 08:01:20

JavaScript數據結構

2014-12-01 09:54:40

JavaScript

2023-06-15 13:01:07

JavaPythonJavaScript

2023-04-26 15:19:36

JavaScripMap數組

2013-04-07 09:37:42

JavaScriptjQueryPromises

2020-06-17 08:48:22

JavaScript開發技術

2022-06-10 10:24:02

JavaScriptCOVID-19前端

2020-12-08 08:07:41

JavaScript中等分數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 粉嫩av久久一区二区三区 | 日韩午夜精品 | 伦理二区 | 日韩av在线中文字幕 | 毛片区| 91精品国产一区二区三区 | 国产精品一区二区三区四区 | 日韩av.com| 国产精品不卡一区 | 久草免费在线视频 | 亚洲综合视频 | 日韩中文字幕在线免费 | 日韩在线免费视频 | 欧美精选一区二区 | 久草院线 | 九九精品网 | 精品一区二区免费视频 | 久久欧美高清二区三区 | 国产精品亚洲成在人线 | 日韩欧美福利视频 | 精品久久国产老人久久综合 | 精品中文字幕在线 | 国产一级电影在线观看 | 一区二区三区视频在线观看 | 久久精品国产免费一区二区三区 | 亚洲精品在线免费观看视频 | 在线观看中文字幕亚洲 | 夜夜骚| 天天干天天爱天天 | 一级黄色片免费 | 亚洲精彩视频在线观看 | 成人国产精品久久久 | 亚洲精品视频久久 | 日本成人在线观看网站 | 五月综合色啪 | 一级黄色片网站 | 久久久成人动漫 | 色婷婷亚洲 | 欧美在线一区二区三区 | 欧美一区二区三区免费电影 | 久久国产一区二区 |