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

資訊專欄INFORMATION COLUMN

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

darryrzhong / 1435人閱讀

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

簡介

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

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

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

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

既然 Promise 創(chuàng)建的實例,是一個異步操作,那么,這個 異步操作的結(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 的實例,是一個異步操作,所以,內(nèi)部拿到 操作的結(jié)果后,無法使用 return 把操作的結(jié)果返回給調(diào)用者; 這時候,只能使用回調(diào)函數(shù)的形式,來把 成功 或 失敗的結(jié)果,返回給調(diào)用者;

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

舉個例子

</>復(fù)制代碼

  1. const fs = require("fs")
  2. function getFileByPaht(fpath) {
  3. var promise = new Promise(function (resolve, reject) {
  4. fs.readFile(fpath, "utf-8", (err, dataStr) => {
  5. if (err) return reject(err);
  6. resolve(dataStr);
  7. });
  8. });
  9. return promise;
  10. }
  11. getFileByPaht("./files/3.txt")
  12. .then(function (dataStr) {
  13. console.log(dataStr);
  14. }, function (err) {
  15. console.log(err.message);
  16. })
Promise的內(nèi)部執(zhí)行順序

用Promise的 .then() 方法解決地獄回調(diào)

</>復(fù)制代碼

  1. 注意: Promisereject 部分傳入的函數(shù)可以為空,即可不寫文件讀取失敗后的操作,

</>復(fù)制代碼

  1. getFileByPath("./files/1222.txt")
  2. .then(function (data) {
  3. console.log(data);
  4. return getFileByPath("./files/2.txt");
  5. },
  6. .then(function (data) {
  7. console.log(data);
  8. return getFileByPath("./files/3.txt");
  9. })
  10. .then(function (data) {
  11. console.log(data);
  12. })
Promise中的異常處理

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

</>復(fù)制代碼

  1. getFileByPath("./files/1222.txt")
  2. .then(function (data) {
  3. console.log(data);
  4. return getFileByPath("./files/2.txt");
  5. }, function (err) {
  6. console.log("讀取失敗:" + err.message);
  7. return getFileByPath("./files/2.txt");
  8. })
  9. .then(function (data) {
  10. console.log(data);
  11. return getFileByPath("./files/3.txt");
  12. })
  13. .then(function (data) {
  14. console.log(data);
  15. })

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

</>復(fù)制代碼

  1. getFileByPath("./files/1222.txt")
  2. .then(function (data) {
  3. console.log(data);
  4. return getFileByPath("./files/2.txt");
  5. })
  6. .then(function (data) {
  7. console.log(data);
  8. return getFileByPath("./files/3.txt");
  9. })
  10. .then(function (data) {
  11. console.log(data);
  12. })
  13. .catch(function (err) {
  14. console.log("異常捕獲: " + err.message);
  15. })

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

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

相關(guān)文章

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

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

    Yu_Huang 評論0 收藏0
  • 2019面試筆記

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

    nidaye 評論0 收藏0
  • 深入前端-JavaScript異步編程

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

    2json 評論0 收藏0
  • 深入前端-JavaScript異步編程

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

    raise_yang 評論0 收藏0

發(fā)表評論

0條評論

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