国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用Promise構(gòu)造函數(shù)來解決地獄回調(diào)問題

darryrzhong / 1419人閱讀

摘要:簡(jiǎn)介是一個(gè)構(gòu)造函數(shù),既然是構(gòu)造函數(shù),那么,我們就可以得到一個(gè)的實(shí)例在上,有兩個(gè)函數(shù),分別叫做成功之后的回調(diào)函數(shù)和失敗之后的回調(diào)函數(shù)在構(gòu)造函數(shù)的屬性上,有一個(gè)方法,也就說,只要是構(gòu)造函數(shù)創(chuàng)建的實(shí)例,都可以訪問到方法表示一個(gè)異步操作每當(dāng)我們一個(gè)

簡(jiǎn)介

Promise 是一個(gè) 構(gòu)造函數(shù),既然是構(gòu)造函數(shù), 那么,我們就可以 new Promise() 得到一個(gè) Promise 的實(shí)例;

在 Promise 上,有兩個(gè)函數(shù),分別叫做 resolve(成功之后的回調(diào)函數(shù)) 和 reject(失敗之后的回調(diào)函數(shù))

在 Promise 構(gòu)造函數(shù)的 Prototype 屬性上,有一個(gè) .then() 方法,也就說,只要是 Promise 構(gòu)造函數(shù)創(chuàng)建的實(shí)例,都可以訪問到 .then() 方法

Promise 表示一個(gè) 異步操作;每當(dāng)我們 new 一個(gè) Promise 的實(shí)例,這個(gè)實(shí)例,就表示一個(gè)具體的異步操作;

既然 Promise 創(chuàng)建的實(shí)例,是一個(gè)異步操作,那么,這個(gè) 異步操作的結(jié)果,只能有兩種狀態(tài):

狀態(tài)1: 異步執(zhí)行成功了,需要在內(nèi)部調(diào)用 成功的回調(diào)函數(shù) resolve 把結(jié)果返回給調(diào)用者;

狀態(tài)2: 異步執(zhí)行失敗了,需要在內(nèi)部調(diào)用 失敗的回調(diào)函數(shù) reject 把結(jié)果返回給調(diào)用者;

由于 Promise 的實(shí)例,是一個(gè)異步操作,所以,內(nèi)部拿到 操作的結(jié)果后,無法使用 return 把操作的結(jié)果返回給調(diào)用者; 這時(shí)候,只能使用回調(diào)函數(shù)的形式,來把 成功 或 失敗的結(jié)果,返回給調(diào)用者;

我們可以在 new 出來的 Promise 實(shí)例上,調(diào)用 .then() 方法,【預(yù)先】 為 這個(gè) Promise 異步操作,指定 成功(resolve) 和 失敗(reject) 回調(diào)函數(shù);

舉個(gè)例子
const fs = require("fs")

function getFileByPaht(fpath) {
  var promise = new Promise(function (resolve, reject) {
    fs.readFile(fpath, "utf-8", (err, dataStr) => {
      if (err) return reject(err);
      resolve(dataStr);
    });
  });
  return promise;
}

getFileByPaht("./files/3.txt")
.then(function (dataStr) {
  console.log(dataStr);
}, function (err) {
  console.log(err.message);
})
Promise的內(nèi)部執(zhí)行順序

用Promise的 .then() 方法解決地獄回調(diào)
注意: Promise的 reject 部分傳入的函數(shù)可以為空,即可不寫文件讀取失敗后的操作,
getFileByPath("./files/1222.txt")
  .then(function (data) {
    console.log(data);
    return getFileByPath("./files/2.txt");
  }, 
  .then(function (data) {
    console.log(data);
    return getFileByPath("./files/3.txt");
  })
  .then(function (data) {
    console.log(data);
  })
Promise中的異常處理

情況一:在讀取文件出錯(cuò)的部分報(bào)錯(cuò),但不影響后方代碼的執(zhí)行

getFileByPath("./files/1222.txt")
  .then(function (data) {
    console.log(data);
    return getFileByPath("./files/2.txt");
  }, function (err) {
    console.log("讀取失敗:" + err.message);
    return getFileByPath("./files/2.txt");
  })
  .then(function (data) {
    console.log(data);
    return getFileByPath("./files/3.txt");
  })
  .then(function (data) {
    console.log(data);
  })

情況二:如果前面任何的Promise執(zhí)行失敗,就停止運(yùn)行后面的方法(catch捕獲機(jī)制)

getFileByPath("./files/1222.txt")
  .then(function (data) {
    console.log(data);
    return getFileByPath("./files/2.txt");
  })
  .then(function (data) {
    console.log(data);
    return getFileByPath("./files/3.txt");
  })
  .then(function (data) {
    console.log(data);
  })
  .catch(function (err) {  
    console.log("異常捕獲: " + err.message);
  })

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99659.html

相關(guān)文章

  • 將"回調(diào)地獄"按在地上摩擦的Promise

    摘要:回調(diào)地獄的問題在于寫法過于繁瑣不夠優(yōu)雅代碼維護(hù)炒雞蛋疼,所以一直被前端程序猿所詬病,尤其是維護(hù)類似代碼的時(shí)候簡(jiǎn)直日了一群哈士奇。,對(duì)象狀態(tài)以和為分水嶺。方法返回一個(gè)帶有拒絕原因參數(shù)的對(duì)象摘自對(duì)的解釋。并且返回的也是一個(gè)對(duì)象。 這是一段旁白 異步虐我千百遍,我待異步如初戀!!做前端的同學(xué)做異步肯定都不陌生。因?yàn)镴avaScript是單線程語言(也就是說不支持多線程編程,這不是廢話么啊喂!...

    Yu_Huang 評(píng)論0 收藏0
  • 2019面試筆記

    摘要:使用構(gòu)造函數(shù)創(chuàng)建對(duì)象后,新對(duì)象與構(gòu)造函數(shù)沒有關(guān)系了,新對(duì)象的屬性指向的是構(gòu)造函數(shù)的原型對(duì)象。構(gòu)造繼承使用父類的構(gòu)造函數(shù)來增強(qiáng)子類的實(shí)例,等于是在子類的構(gòu)造函數(shù)內(nèi)部執(zhí)行。 一.js原始類型: 在js中,存在著6種原始值: * boolean * number * string * undefined * null * symbol 注意: 雖然typeof null輸出的是o...

    nidaye 評(píng)論0 收藏0
  • 深入前端-JavaScript異步編程

    摘要:缺點(diǎn)無法取消當(dāng)處于狀態(tài)時(shí),無法得知目前進(jìn)展到哪一個(gè)階段錯(cuò)誤不能被生成器什么是函數(shù)是提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同函數(shù)有多種理解角度。 JavaScript的執(zhí)行機(jī)制在上篇文章中進(jìn)行了深入的探討,那么既然是一門單線程語言,如何進(jìn)行良好體驗(yàn)的異步編程呢 回調(diào)函數(shù)Callbacks 當(dāng)程序跑起來時(shí),一般情況下,應(yīng)用程序(application program)會(huì)時(shí)常通...

    2json 評(píng)論0 收藏0
  • 深入前端-JavaScript異步編程

    摘要:缺點(diǎn)無法取消當(dāng)處于狀態(tài)時(shí),無法得知目前進(jìn)展到哪一個(gè)階段錯(cuò)誤不能被生成器什么是函數(shù)是提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同函數(shù)有多種理解角度。 JavaScript的執(zhí)行機(jī)制在上篇文章中進(jìn)行了深入的探討,那么既然是一門單線程語言,如何進(jìn)行良好體驗(yàn)的異步編程呢 回調(diào)函數(shù)Callbacks 當(dāng)程序跑起來時(shí),一般情況下,應(yīng)用程序(application program)會(huì)時(shí)常通...

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

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

0條評(píng)論

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