欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中?Promise?的使用技巧

 更新時間:2022年08月15日 16:16:11   作者:JerryWang_sap  
這篇文章主要介紹了JavaScript中?Promise?的使用技巧,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

“生產(chǎn)代碼”是可能需要一些時間來執(zhí)行的代碼。

“消費代碼”是必須等待結(jié)果的代碼。

Promise 是一個 JavaScript 對象,它鏈接生產(chǎn)代碼和消費代碼。

看一段最簡單的代碼:

let myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code" (May take some time)

  myResolve(); // when successful
  myReject();  // when error
});

// "Consuming Code" (Must wait for a fulfilled Promise)
myPromise.then(
  function(value) { /* code if successful */ },
  function(error) { /* code if some error */ }
);

執(zhí)行 new Promise 的構(gòu)造函數(shù)后,會立即進入 Promise 的構(gòu)造函數(shù)體內(nèi),即包含了 resolve 和 reject 方法的匿名函數(shù)。

然后執(zhí)行完畢。此時并不會執(zhí)行 then 里的回調(diào)函數(shù)。

然后 then 指定的回調(diào)函數(shù)被異步調(diào)用,注意 Chrome 里的提示:

  • 當(dāng) Promise 對象處于 pending(工作)狀態(tài)時,結(jié)果是未定義的。
  • 當(dāng) Promise 對象 fulfilled 時,結(jié)果是一個值。如下圖所示:

  • 當(dāng) Promise 對象被 rejected 時,結(jié)果是一個錯誤對象。

開發(fā)人員無法訪問 Promise 屬性狀態(tài)和結(jié)果,必須使用 Promise 方法來處理 Promise。

看一個包含 UI 的例子:

Promise 把異步代碼封裝起來。上圖的 setTimeout,模擬了一個耗時 3 秒的 HTTP 操作。

返回的 myPromise 對象,使用 then 注冊回調(diào)函數(shù)。回調(diào)函數(shù)不關(guān)心自己什么時候被調(diào)用。

運行顯示:

3 秒后:

一個文件訪問的例子:

let myPromise = new Promise(function(myResolve, myReject) {
  let req = new XMLHttpRequest();
  req.open('GET', "mycar.htm");
  req.onload = function() {
    if (req.status == 200) {
      myResolve(req.response);
    } else {
      myReject("File not Found");
    }
  };
  req.send();
});

myPromise.then(
  function(value) {myDisplayer(value);},
  function(error) {myDisplayer(error);}
);

函數(shù)體內(nèi)一般是一個比較費時的操作,操作本身會立即執(zhí)行,但什么時候執(zhí)行結(jié)束?這就是一個異步操作了。執(zhí)行結(jié)束后,通過 resolve 通知 then 注冊的回調(diào)函數(shù)。

到此這篇關(guān)于JavaScript  Promise 的使用技巧的文章就介紹到這了,更多相關(guān)JavaScript Promise 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論