js中promise實例解析
大家都知道nodejs很快,為什麼會這麼快呢,原因就是node採用非同步回呼的方式來處理需要等待的事件,使得程式碼會繼續往下執行不用在某個地方等待著。但是也有一個不好的地方,當我們有很多回調的時候,比如這個回調執行完需要去執行下個回調,然後接著再執行下個回調,這樣就會造成層層嵌套,代碼不清晰,很容易進入“回調監獄”,就容易造成下邊的例子:
async(1, function(value){ async(value, function(value){ async(value, function(value){ async(value, function(value){ async(value, function(value){ async(value, final); }); }); }); }); });
這樣的寫法會讓人崩潰,那麼有什麼辦法可以解決這個問題呢,或者有其他別的寫法嗎?答案是有的,es6新出的promise對像已經es7的async await都可以解決這個問題,當然這裡先介紹promise對象,es7的async await將在後邊的文章中分享。下邊未來介紹Promise物件。
二、簡介
Promise,他是一個對象,是用來處理非同步操作的,可以讓我們寫非同步呼叫的時候寫起來更加優雅,更加美觀便於閱讀。顧名思義為承諾、許諾的意思,意思是使用了Promise之後他肯定會給我們答复,無論成功或者失敗都會給我們一個答复,所以我們就不用擔心他跑了哈哈。所以,Promise有三種狀態:pending(進行中),resolved(完成),rejected(失敗)。只有非同步返回的結構可以改變其狀態。所以,promise的流程一般只有兩種:pending->resolved或pending->rejected。
promise物件還有一個比較常用的then方法,用來執行回呼函數,then方法接受兩個參數,第一個是成功的resolved的回調,另一個是失敗rejected的回調,第二個失敗的回呼參數可選。而then方法裡也可以回傳promise對象,這樣就可以鍊式呼叫了。接下來上程式碼:
var Pro = function (time) { //返回一个Promise对象 return new Promise(function (resolve, reject) { console.log('123'); //模拟接口调用 setTimeout(function () { //这里告诉Promise 成功了,然后去执行then方法的第一个函数 resolve('成功返回'); }, time); }) }; (function(){ console.log('start'); Pro(3000) .then(function(data){ console.log(data); return Pro(5000);}) .then(function(data){ console.log(data); console.log('end'); }) })();
上邊程式碼中,定義了一個Pro變量,然後把一個匿名函數賦給他,函數回傳一個Promise對象,然後物件裡邊接收一個函數,分別把resolve跟reject方法當參數傳進去,用setTimeOut來模擬非同步請求,當執行resolve方法後就會呼叫then方法的一個函數。結果如下:
三、Promise 的api
1、Promise.resolve()
2、Promise.reject()
3 、Promise.prototype.then()
4、Promise.prototype.catch()
5、Promise.all() // 所有的都有完成,相當於且
6、Promise.race( ) // 完成一個即可,相當於或
1、Promise.resolve()的作用將現有物件轉為Promise物件resolvedl;Promise.resolve('test')==new Promise(resolve =>resolve('test'))
2、Promise.reject()也是回傳一個Promise物件,狀態為rejected;
3、then方法上邊已經做介紹,這裡就不再介紹。
4、catch():發生錯誤的回呼函數。
5、Promise.all()適合用於所有的結果都完成了才去執行then()成功的操作。舉個例子:
let p1 =new Promise(function(resolve,reject){ resolve(1); }); let p2 = new Promise(function(resolve,reject){ resolve(2); }); let p3 = new Promise(function(resolve,reject){ resolve(3); }); Promise.all([p1, p2, p3]).then(function (results) { console.log('success:'+results); }).catch(function(r){ console.log("error"); console.log(r); });
最後輸出:
#6、Promise.race()的作用也是同時執行多個實例,只要有一個實例改變狀態,Promise就改為那個實例所改變的狀態;
四、例子
var Pro = function () { //返回一个Promise对象 return new Promise(function (resolve, reject) { //模拟接口调用 setTimeout(function () { resolve(true); }, 1000); }) }; var Pro2 = function () { //返回一个Promise对象 return new Promise(function (resolve, reject) { //模拟接口调用 setTimeout(function () { resolve('Pro2成功执行'); }, 1000); }) }; Pro().then(function(data){ var val = data; console.log(val) if (val) { console.log(1111) return Pro2() } }).then(function(data1){ console.log(data1) })
輸出:
這樣就可以用then方法可以實作鍊式呼叫了。
相關推薦:
以上是js中promise實例解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

在日常生活中,我們常常會遇到承諾與兌現之間的問題。無論是在個人關係中,或是在商業交易中,承諾的兌現都是建立信任的關鍵。然而,承諾的利與弊也常常會引起爭議。本文將探討承諾的利與弊,並給予一些建議,如何做到言出必行。承諾的利是顯而易見的。首先,承諾可以建立信任。當一個人信守承諾時,他會讓別人相信自己是個可信賴的人。信任是人與人之間建立的紐帶,它可以讓人們更加

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

Promise.resolve()詳解,需要具體程式碼範例Promise是JavaScript中一種用來處理非同步操作的機制。在實際開發中,常常需要處理一些需要依序執行的非同步任務,而Promise.resolve()方法就是用來傳回一個已經Fulfilled狀態的Promise物件。 Promise.resolve()是Promise類別的靜態方法,它接受一個

Golang是一門功能強大且高效的程式語言,可用於開發各種應用程式和服務。在Golang中,指標是一種非常重要的概念,它可以幫助我們更靈活和有效率地操作資料。指標轉換是指在不同類型之間進行指標操作的過程,本文將透過具體的實例來學習Golang中指標轉換的最佳實踐。 1.基本概念在Golang中,每個變數都有一個位址,位址就是變數在記憶體中的位置。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
