成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Promise對象

maxmin / 2105人閱讀

摘要:對象這個東西吧,它一直困擾我很久很久了,但是之前未能靜下心來好好研究下,現(xiàn)在終于有時間好好鼓搗一下了。

Promise 對象

promise這個東西吧,它一直困擾我很久很久了,但是之前未能靜下心來好好研究下,現(xiàn)在終于有時間好好鼓搗一下了。
順帶記錄下吧~~


特點

then的鏈式調(diào)用

Promise.all()

The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.

一種異步編程的解決方案
有了Promise對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套的回調(diào)函數(shù)
then方式是定義在Promise.prototype上的,所以Promise實例就能調(diào)用這個方法,添加狀態(tài)改變時的回調(diào)函數(shù)了

特點

對象的狀態(tài)不受外界影響
Pending => Resolve
Pending => Fulfilled

一旦狀態(tài)改變就不會再變,任何時候都可以得到這個結(jié)果

then 的 鏈式調(diào)用 第一個回調(diào)函數(shù)返回正常值

使用Mock模擬接口,定義了兩個接口

Mock.mock("http://g.cn", {
    "data|0-10": [{
        "id|+1": 1,
        "thscode|1-100.2": 1,
        "zqjc": Mock.Random.csentence(5)
    }]
});

Mock.mock("http://q.cn", {
    "data|0-10": [{
        "id|+1": 1,
        "jgcg": Mock.Random.csentence(5)
    }]
});

獲取ajax的通用函數(shù),接收url地址作為參數(shù)

function getAjax(url){
  return new Promise(function(resolve, reject) {
    axios.get(url)
    .then(function(response){
      resolve(response);
      console.log("ajax 1:", response);
    })
    .catch(function(err){
      reject(err);
      console.log(err);
    });
  });
}

下面的代碼使用then方法依次指定了兩個回調(diào)函數(shù)。
第一個回調(diào)函數(shù)完成后,會將返回結(jié)果
作為第二個回調(diào)函數(shù)的參數(shù)傳入
通過運行結(jié)果即可知

function getIndexData(){
  getAjax("http://g.cn").then(function(res) {
    console.log("第一個then: ", res);

    return res.data;
  })
  .then(function(res) {
    console.log("第二個then: ", res);
  }).catch(err => {
    console.log(err);
  })
}

getIndexData()
第一個回調(diào)函數(shù)返回的仍舊是一個promise

如果是這樣,也就是還存在異步,則第二個回調(diào)的執(zhí)行就需等待第一個執(zhí)行完畢,不管是resolve還是reject

function getAjax2(url){
  return new Promise(function(resolve, reject) {
    axios.get(url)
    .then(function(response){
      setTimeout(() => {
        resolve(response);
      }, 2000);

      console.log("ajax 2:", response);
    })
    .catch(function(err){
      reject(err);
      console.log(err);
    });
  });
}

function getIndex2Data() {
  getAjax("http://g.cn").then(res => {
    return getAjax2("http://q.cn");
  })
  .then(res => {
    console.log("in the data: ", res);
  })
  .catch(err => {
    console.log(err);
  });
}

getIndex2Data();
Promise.all()

如下代碼,定義了p1、p2, 和p
p的狀態(tài)是由p1和p2決定的

只有p1和shup2的狀態(tài)都變成了Fulfilled,p的狀態(tài)才會變成Fulfilled,此時p1和p2的返回值組成一個數(shù)組,傳遞給p的回調(diào)函數(shù);

只要p1、p2的狀態(tài)中有一個被Rejected,p的狀態(tài)就變成Rejected,此時第一個被Rejected的實例的返回值會傳遞給p的回調(diào)函數(shù)

#1

均為p1和p2增加了catch函數(shù),則,如果p1或者p2發(fā)生reject或者其它異常,那么會由自己的catch函數(shù)捕獲,等到執(zhí)行完catch,實例的狀態(tài)也變成了resovled

var p1 = new Promise((resolve, reject) => {
  resolve("one corgi");
})
.then(res => res)
.catch(err => err)

var p2 = new Promise((resolve, reject) => {
  resolve("two corgies");
})
.then(res => res)
.catch(err => err)

var p = Promise.all([p1, p2]);

p.then(res => {
  console.log(res);
})
.catch((err) => {
  console.log("all:", err);
});
// 輸出: ["one corgi", "two corgies"]
#2

增加p3,不帶catch,則最終的就會被p的catch捕獲了

var p3 = new Promise((resolve, reject) => {
  reject("Error");
})
.then(res => res)

var p = Promise.all([p1, p2, p3]);

p.then(res => {
  console.log(res);
})
.catch((err) => {
  console.log("all:", err);
});

//輸出: ["all: Error]

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95845.html

相關(guān)文章

  • Promise——從閱讀文檔到簡單實現(xiàn)(一)

    摘要:意味著操作成功完成。方法接收失敗情況的回調(diào)函數(shù)作為參數(shù),返回一個對象。參數(shù)回調(diào)函數(shù)不接收任何參數(shù),當對象變成狀態(tài)時被調(diào)用?,F(xiàn)在各個方法的參數(shù)返回值功能和使用方法已經(jīng)有個大概的了解了,為了進一步理解其原理,接下來我打算簡單地實現(xiàn)一下它。 前言 最近幾周參加筆試面試,總是會遇到實現(xiàn)異步和處理異步的問題,然而作者每次都無法完美地回答。在最近一次筆試因為 Promise 而被刷掉后,我終于下定...

    yanwei 評論0 收藏0
  • 關(guān)于Promise

    摘要:反之,操作失敗,對象由狀態(tài)轉(zhuǎn)換為狀態(tài),此時回調(diào)函數(shù)會執(zhí)行方法。這里需要注意的是,雖然在之后便執(zhí)行了方法,但是并不是意味著往后的對象不執(zhí)行了,其他的還是對象還是要執(zhí)行的,只是不會再調(diào)用函數(shù)。 在 掘金上看見一篇寫promise的文章,感覺作者寫的很棒,文章鏈接在這:八段代碼徹底掌握 Promise ??赐曛蟾杏X學到了很多,所以又重新把JavaScript Promise迷你書(中文版)...

    546669204 評論0 收藏0
  • js-Promise

    摘要:總結(jié)用方法創(chuàng)建對象用或添加對象的處理函數(shù)它的作用是為實例添加狀態(tài)改變時的回調(diào)函數(shù)。方法是的別名,用于指定發(fā)生錯誤時的回調(diào)函數(shù)。 一、為什么需要Promise Javascript 采用回調(diào)函數(shù)(callback)來處理異步編程。從同步編程到異步回調(diào)編程有一個適應的過程,但是如果出現(xiàn)多層回調(diào)嵌套,也就是我們常說的回調(diào)金字塔(Pyramid of Doom),絕對是一種糟糕的編程體驗。于是...

    xcold 評論0 收藏0
  • 簡單學習 Promise 對象

    摘要:方法是的別名,用于指定發(fā)生錯誤時的回調(diào)函數(shù)。由于字符串不屬于異步操作判斷方法是字符串對象不具有方法,返回實例的狀態(tài)從一生成就是,所以回調(diào)函數(shù)會立即執(zhí)行。出錯了等同于出錯了出錯了上面的代碼生成一個對象的實例,狀態(tài)為,回調(diào)函數(shù)會立即執(zhí)行。 引言 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)和事件——更合理且強大。最近的項目要用到這個,就參照阮一峰老師的《ES6標準入門...

    muzhuyu 評論0 收藏0
  • 嘗試實現(xiàn)一個Promise

    摘要:的實現(xiàn)說明沒有執(zhí)行里的函數(shù)說明執(zhí)行了里的函數(shù)說明執(zhí)行里的函數(shù)過程中出現(xiàn)錯誤和執(zhí)行狀態(tài)時的回調(diào)函數(shù)后返回的結(jié)果都需要執(zhí)行傳進來的對象不能等于當前的對象回調(diào)返回的值或者的值是對象時需要等待該對象的狀態(tài)變更設置當前狀態(tài)的狀態(tài)和值執(zhí)行回調(diào)隊列里的函 function resolve_promise_value(promise,value) {//PromiseA+的實現(xiàn) var th...

    DTeam 評論0 收藏0
  • 關(guān)于promise的小結(jié)

    摘要:則是把類似的異步處理對象和處理規(guī)則進行規(guī)范化,并按照采用統(tǒng)一的接口來編寫,而采取規(guī)定方法之外的寫法都會出錯。這個對象有一個方法,指定回調(diào)函數(shù),用于在異步操作執(zhí)行完后執(zhí)行回調(diào)函數(shù)處理。到目前為止,已經(jīng)學習了創(chuàng)建對象和用,方法來注冊回調(diào)函數(shù)。 Promise 本文從js的異步處理出發(fā),引入Promise的概念,并且介紹Promise對象以及其API方法。 js里的異步處理 可以參考這篇文章...

    Tony_Zby 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<