摘要:簡介是一個構造函數,既然是構造函數,那么,我們就可以得到一個的實例在上,有兩個函數,分別叫做成功之后的回調函數和失敗之后的回調函數在構造函數的屬性上,有一個方法,也就說,只要是構造函數創建的實例,都可以訪問到方法表示一個異步操作每當我們一個
簡介
Promise 是一個 構造函數,既然是構造函數, 那么,我們就可以 new Promise() 得到一個 Promise 的實例;
在 Promise 上,有兩個函數,分別叫做 resolve(成功之后的回調函數) 和 reject(失敗之后的回調函數)
在 Promise 構造函數的 Prototype 屬性上,有一個 .then() 方法,也就說,只要是 Promise 構造函數創建的實例,都可以訪問到 .then() 方法
Promise 表示一個 異步操作;每當我們 new 一個 Promise 的實例,這個實例,就表示一個具體的異步操作;
既然 Promise 創建的實例,是一個異步操作,那么,這個 異步操作的結果,只能有兩種狀態:
狀態1: 異步執行成功了,需要在內部調用 成功的回調函數 resolve 把結果返回給調用者;
狀態2: 異步執行失敗了,需要在內部調用 失敗的回調函數 reject 把結果返回給調用者;
由于 Promise 的實例,是一個異步操作,所以,內部拿到 操作的結果后,無法使用 return 把操作的結果返回給調用者; 這時候,只能使用回調函數的形式,來把 成功 或 失敗的結果,返回給調用者;
我們可以在 new 出來的 Promise 實例上,調用 .then() 方法,【預先】 為 這個 Promise 異步操作,指定 成功(resolve) 和 失敗(reject) 回調函數;
舉個例子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的內部執行順序 用Promise的 .then() 方法解決地獄回調
注意: Promise的 reject 部分傳入的函數可以為空,即可不寫文件讀取失敗后的操作,
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中的異常處理
情況一:在讀取文件出錯的部分報錯,但不影響后方代碼的執行
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執行失敗,就停止運行后面的方法(catch捕獲機制)
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); })
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99659.html
摘要:回調地獄的問題在于寫法過于繁瑣不夠優雅代碼維護炒雞蛋疼,所以一直被前端程序猿所詬病,尤其是維護類似代碼的時候簡直日了一群哈士奇。,對象狀態以和為分水嶺。方法返回一個帶有拒絕原因參數的對象摘自對的解釋。并且返回的也是一個對象。 這是一段旁白 異步虐我千百遍,我待異步如初戀!!做前端的同學做異步肯定都不陌生。因為JavaScript是單線程語言(也就是說不支持多線程編程,這不是廢話么啊喂!...
摘要:缺點無法取消當處于狀態時,無法得知目前進展到哪一個階段錯誤不能被生成器什么是函數是提供的一種異步編程解決方案,語法行為與傳統函數完全不同函數有多種理解角度。 JavaScript的執行機制在上篇文章中進行了深入的探討,那么既然是一門單線程語言,如何進行良好體驗的異步編程呢 回調函數Callbacks 當程序跑起來時,一般情況下,應用程序(application program)會時常通...
摘要:缺點無法取消當處于狀態時,無法得知目前進展到哪一個階段錯誤不能被生成器什么是函數是提供的一種異步編程解決方案,語法行為與傳統函數完全不同函數有多種理解角度。 JavaScript的執行機制在上篇文章中進行了深入的探討,那么既然是一門單線程語言,如何進行良好體驗的異步編程呢 回調函數Callbacks 當程序跑起來時,一般情況下,應用程序(application program)會時常通...
閱讀 3653·2021-10-11 10:58
閱讀 2245·2021-10-08 10:05
閱讀 2024·2021-09-27 13:34
閱讀 3558·2019-08-30 15:53
閱讀 2723·2019-08-30 14:02
閱讀 3551·2019-08-29 16:55
閱讀 614·2019-08-29 15:41
閱讀 1062·2019-08-29 15:23