91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript異步函數Promisification處理的方法

發布時間:2022-08-15 16:18:02 來源:億速云 閱讀:131 作者:iii 欄目:開發技術

這篇文章主要介紹了JavaScript異步函數Promisification處理的方法的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇JavaScript異步函數Promisification處理的方法文章都會有所收獲,下面我們一起來看看吧。

前言:

Promisification 是一個很長的詞,表示一個編程范式的轉變,即將接受回調的函數轉換為一個返回類型為 Promise 的函數。

我們現實的開發項目中經常需要這種轉換,因為許多函數和庫都是基于回調的,但是 Promise 更方便,所以對它們進行 Promisification 處理是有意義的。

下面是一個簡單的例子:

function loadScript(src, callback) {
  let script = document.createElement('script');
  script.src = src;

  script.onload = () => callback(null, script);
  script.onerror = () => callback(new Error(`Script load error for ${src}`));

  document.head.append(script);
}

這段代碼,動態創建一個 script 元素,待其加載完畢后,會觸發 onload 事件指定的回調函數。

運行時,loadScript 的調用者,負責指定回調函數:

loadScript('path/script.js', (err, script) => {...})

下面我們將會對這個函數進行 Promisification 改造。

我們將創建一個新函數 loadScriptPromise(src),它執行相同的操作(加載腳本),但返回一個 Promise 而不是使用回調。

換句話說,我們只傳遞 src (沒有回調)并得到一個 Promise 作為返回參數,當加載成功時使用創建并加載好的 script 進行 resolve,否則通過 reject 拋出錯誤。

改造后的函數:

let loadScriptPromise = function(src) {
  return new Promise((resolve, reject) => {
    loadScript(src, (err, script) => {
      if (err) reject(err);
      else resolve(script);
    });
  });
};

消費代碼:

loadScriptPromise('path/script.js').then(...)

正如我們所見,新函數是原始 loadScript 函數的包裝器。

在實踐中,我們可能需要 Promisify 多個函數,所以構造一個 helper 函數顯得更有意義。

我們稱這個函數為 promisify(f):它接受一個準備被改造成 Promise 的函數 f, 并返回一個 wrapper 函數。

完整實現如下:

function promisify(f) {
  return function (...args) { // return a wrapper-function (*)
    return new Promise((resolve, reject) => {
      function callback(err, result) { // our custom callback for f (**)
        if (err) {
          reject(err);
        } else {
          resolve(result);
        }
      }
      args.push(callback); // append our custom callback to the end of f arguments

      f.call(this, ...args); // call the original function
    });
  };
}

消費代碼:

let loadScriptPromise = promisify(loadScript);
loadScriptPromise(...).then(...);

關于“JavaScript異步函數Promisification處理的方法”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“JavaScript異步函數Promisification處理的方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀安县| 兴化市| 民县| 舒兰市| 毕节市| 应城市| 东丰县| 拉孜县| 上饶县| 恩施市| 乐山市| 奎屯市| 读书| 星座| 永年县| 西城区| 台中市| 彩票| 德江县| 灵宝市| 封丘县| 诸暨市| 淮安市| 承德县| 台江县| 鞍山市| 肇庆市| 镇赉县| 商都县| 临沧市| 清河县| 惠东县| 元氏县| 崇明县| 韶关市| 泊头市| 凌海市| 金乡县| 绿春县| 庆城县| 宁城县|