摘要:簡(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
摘要:回調(diào)地獄的問題在于寫法過于繁瑣不夠優(yōu)雅代碼維護(hù)炒雞蛋疼,所以一直被前端程序猿所詬病,尤其是維護(hù)類似代碼的時(shí)候簡(jiǎn)直日了一群哈士奇。,對(duì)象狀態(tài)以和為分水嶺。方法返回一個(gè)帶有拒絕原因參數(shù)的對(duì)象摘自對(duì)的解釋。并且返回的也是一個(gè)對(duì)象。 這是一段旁白 異步虐我千百遍,我待異步如初戀!!做前端的同學(xué)做異步肯定都不陌生。因?yàn)镴avaScript是單線程語言(也就是說不支持多線程編程,這不是廢話么啊喂!...
摘要:使用構(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...
摘要:缺點(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í)常通...
摘要:缺點(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í)常通...
閱讀 3667·2021-10-11 10:58
閱讀 2254·2021-10-08 10:05
閱讀 2040·2021-09-27 13:34
閱讀 3580·2019-08-30 15:53
閱讀 2737·2019-08-30 14:02
閱讀 3572·2019-08-29 16:55
閱讀 628·2019-08-29 15:41
閱讀 1074·2019-08-29 15:23