在本教程中,我們將討論 JavaScript 中的 Promise 鏈。在轉(zhuǎn)向 Promise 鏈之前,我們先來談?wù)勈裁词?Promise
因此,我們知道 JavaScript 是單線程的,這意味著不允許兩個(gè)函數(shù)同時(shí)運(yùn)行,因?yàn)槲覀冎挥幸粋€(gè)調(diào)用堆棧,如下所示,它有一個(gè)要執(zhí)行的函數(shù)
當(dāng)一個(gè)函數(shù)完成執(zhí)行時(shí),另一個(gè)函數(shù)開始執(zhí)行,因此為了實(shí)現(xiàn)兩個(gè)或多個(gè)函數(shù)同時(shí)運(yùn)行,我們?cè)?JavaScript 示例中使用異步編程 – setTimeout 函數(shù),它接受一個(gè)回調(diào)函數(shù)和指定的時(shí)間,之后它將執(zhí)行執(zhí)行該函數(shù)。
setTimeout(function cT(){ console.log("I am here after 5 seconds") }, 5000);
登錄后復(fù)制
因此,我們對(duì)異步操作使用 Promise,它給出異步操作的結(jié)果及其完成或失敗。
就像在現(xiàn)實(shí)生活中一樣,我們以與做出承諾相同的方式承諾完成任何工作,并且它存在于三種狀態(tài)之一。
-
待處理 – 這代表初始狀態(tài),表示它既未完成也未拒絕。
Fulfilled – 這表示我們分配的操作已成功完成。
拒絕 – 此狀態(tài)表示操作無法執(zhí)行,它被拒絕。
異步方法返回一個(gè)值,但它不返回最終值,而是返回一個(gè)將來為該函數(shù)提供值的承諾。
我們?cè)?Promise 語句之后使用 then() 方法執(zhí)行 Promise,如果由于某些錯(cuò)誤而被拒絕,則將使用 catch 塊進(jìn)行處理。
如何在 JavaScript 中聲明 Promise?
let promise = new Promise(function (resolve, reject) { return resolve("Hello I am resolved"); });
登錄后復(fù)制
這里的promise內(nèi)部有一個(gè)函數(shù),稱為回調(diào)函數(shù),它有一個(gè)參數(shù)作為兩個(gè)方法resolve()和reject(),正如我們已經(jīng)知道的那樣從上面關(guān)于兩者的解釋來看。
因此,這里的resolve確保我們給出的函數(shù)的成功完成,而reject將確保它對(duì)給定的可執(zhí)行回調(diào)函數(shù)不成功完成的責(zé)任。
示例 1
讓我們看看使用 Set 查找字符串中唯一字符的程序。
<!DOCTYPE html> <html> <head> <title>Promise chaining in JavaScript</title> </head> <body> <h3> Execute a Promise we receive</h3> <p id ="result"></p> <script> let promise = new Promise(function (resolve, reject) { return resolve("Hello I am resolved"); }); promise.then(function(value) { console.log(value); document.getElementById("result").innerHTML += value; }) </script> </body> </html>
登錄后復(fù)制
在上面里面。 then() 方法會(huì)傳遞一個(gè)回調(diào)函數(shù),value 變量負(fù)責(zé)打印出來自resolve() 方法的結(jié)果。
什么是承諾鏈?
Promise 鏈基本上是多個(gè)異步函數(shù)調(diào)用,并以同步方式依次執(zhí)行它們。 then() 方法。
示例 2
讓我們通過一個(gè)例子來詳細(xì)理解。
<!DOCTYPE html> <html> <head> <title>Promise chaining in JavaScript </title> </head> <body> <h3> Promise Chaining</h3> <p id ="result"></p> <script> let promise = new Promise(function (resolve, reject) { return resolve(10); }); promise.then(function(firstPromise_val) { alert(firstPromise_val) document.getElementById("result").innerHTML += "First Promise val: "+firstPromise_val+"<br>"; return firstPromise_val+10; }). then(function(secondPromise_val){ alert(secondPromise_val) document.getElementById("result").innerHTML +="Second Promise val: "+ secondPromise_val+"<br>"; return secondPromise_val+10; }). then(function(thirdpromise_val){ alert(thirdpromise_val) document.getElementById("result").innerHTML +="Third Promise val: "+thirdpromise_val+"<br>"; return thirdpromise_val+10; }) </script> </body> </html>
登錄后復(fù)制
讓我們了解承諾鏈?zhǔn)侨绾喂ぷ鞯摹?/p>
-
第一個(gè)最初的承諾得到了兌現(xiàn)。
然后 .then() 方法調(diào)用它創(chuàng)建了一個(gè)新的 Promise 并得到了解析。
再次調(diào)用 .then() 方法,它創(chuàng)建了一個(gè)新的 Promise,然后它也得到了解析。
同樣,它正在工作,我們也可以添加另一個(gè)承諾處理程序。
所以,基本上 .then() 方法返回一個(gè)新的 Promise,并使用 .then() 調(diào)用 next 等等。
示例 3
<!DOCTYPE html> <html> <head> <title>Promise chaining in javascript</title> </head> <body> <h3> Promise Chaining</h3> <p id ="result"></p> <script> let promise = new Promise(function (resolve, reject) { return resolve("My"); }). then(function(firstPromise_val) { alert(firstPromise_val) return firstPromise_val+" Name"; }). then(function(secondPromise_val){ alert(secondPromise_val) return secondPromise_val+" is"; }). then(function(thirdpromise_val){ alert(thirdpromise_val) return thirdpromise_val+" Kalyan"; }). then(function(thirdpromise_val){ alert(thirdpromise_val) document.getElementById("result").innerHTML = thirdpromise_val }) </script> </body> </html>
登錄后復(fù)制
因此,我們看到了有關(guān)其工作原理的從基礎(chǔ)到承諾鏈的深入概念。
以上就是JavaScript 中的 Promise 鏈?zhǔn)鞘裁矗康脑敿?xì)內(nèi)容,更多請(qǐng)關(guān)注www.92cms.cn其它相關(guān)文章!