亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Promise對(duì)象

maxmin / 2152人閱讀

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

Promise 對(duì)象

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


特點(diǎn)

then的鏈?zhǔn)秸{(diào)用

Promise.all()

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

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

特點(diǎn)

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

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

then 的 鏈?zhǔn)秸{(diào)用 第一個(gè)回調(diào)函數(shù)返回正常值

使用Mock模擬接口,定義了兩個(gè)接口

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方法依次指定了兩個(gè)回調(diào)函數(shù)。
第一個(gè)回調(diào)函數(shù)完成后,會(huì)將返回結(jié)果
作為第二個(gè)回調(diào)函數(shù)的參數(shù)傳入
通過運(yùn)行結(jié)果即可知

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

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

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

如果是這樣,也就是還存在異步,則第二個(gè)回調(diào)的執(zhí)行就需等待第一個(gè)執(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)才會(huì)變成Fulfilled,此時(shí)p1和p2的返回值組成一個(gè)數(shù)組,傳遞給p的回調(diào)函數(shù);

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

#1

均為p1和p2增加了catch函數(shù),則,如果p1或者p2發(fā)生reject或者其它異常,那么會(huì)由自己的catch函數(shù)捕獲,等到執(zhí)行完catch,實(shí)例的狀態(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,則最終的就會(huì)被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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/95845.html

相關(guān)文章

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

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

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

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

    546669204 評(píng)論0 收藏0
  • js-Promise

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

    xcold 評(píng)論0 收藏0
  • 簡單學(xué)習(xí) Promise 對(duì)象

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

    muzhuyu 評(píng)論0 收藏0
  • 嘗試實(shí)現(xiàn)一個(gè)Promise

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

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

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

    Tony_Zby 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<