日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

学JS的心路历程-Promise(一)

發布時間:2024/4/15 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学JS的心路历程-Promise(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在進入Promise代碼之前,我們先來用個例子來解釋Promise是什么。

?

未來值

假設我們今天來到快餐店,點了一個漢堡,付錢給店員。

點了餐點并付費,可以理解為我們發送了一個請求,希望得到一個回傳值(也就是漢堡)。

?

不過常見情況是,漢堡還沒做好,不能立即給我,店員給了我一張收據上面寫著點餐號碼。這個點餐號碼是一種「我欠你」的承諾(promise),確保我最后能夠拿到我的漢堡。

?

所以只要拿著收據,我就能確保我未來的漢堡,不需要去擔心。這樣在等待的同時我就能夠做其他事情,像是滑手機。

?

直到店員喊了我的號碼,我拿著我的收據到柜臺給店員換得了我的漢堡。

換句話說,一旦未來值準備就緒,我就能夠用手上對值的承諾(value-promise)交換那個值本身。

但還有另一種結果,就是叫了我的號碼,我走過去后店員跟我說漢堡賣完了。

這時候我們可以看到未來值一個重要的特性:代表成功,也可能代表失敗。

?

也就是說Promise物件的設計就是針對異步函式的執行結果所設計的,最后的結果要不然就用一個回傳值來fulfilled(實現),要不然就用一個理由(錯誤)來rejected(拒絕)。

?

那到底要怎么用呢?首先我們要先建立一個Promise物件:

?

var promise = new Promise(function(resolve,reject){

//成功時

resolve(value)

//失敗時

reject(reason)

});

?

promise.then(function(value){

// on fulfillment(已實現時)

},function(reason){

// on rejection(已拒絕時)

})

建構式傳入參數需要一個函式,稱為executor有強烈執行的意味,當傳入這個函式時,會在建構式回傳物件實體前立即執行,也就是說Promise會立即決定里面的狀態,resolve或reject,兩者都必須是函式類型。

成功執行resolve(value)而Promise物件的狀態會跑到fulfilled狀態固定住(cumminsathletic);

失敗或是發生錯誤時執行reject(reason)而Promise物件的狀態會跑到rejected狀態固定住。

?

也因為與一般物件實體化過程不太一樣,所以通常會先包在一個函式中,需要使用時再呼叫函式來產生Promise物件:

?

function generatePromise(value){

return new Promise(function(resolve,reject){

if(value)

resolve(value)//已實現,成功

else

reject(reason)//有錯誤,已拒絕,失敗

});

}

再來剛剛上面示例有看到說promise后面接著then。那then是什么呢?

?

then

then在Promise標準中是一個重要的方法,代表「然后、接著或接下來」的意思。then方法物件被稱為thenable物件,我們來看個示例:

?

promise.then(onFulfilled,onRejected);

?

promise.then(function(value){

// fulfillment

},function(reason){

// rejection

});

then一樣用兩個函式當作參數傳入,onFulfilled和onRejected。onFulfilled是當Promise物件狀態轉為fulfilled時呼叫的函式,會有一個傳入參數值value可用;onRejected則是Promise物件狀態轉為rejected時呼叫,會有一個傳入參數值reason可用。

?

而在最后,then會回傳另一個「新的Promise物件」。

?

講了那么多概念上的東西是不是令人難以理解?沒關系,這邊用個實際示例來講解:

?

var promise = new Promise(function(resolve,reject){

resolve(1)

})

?

promise

.then(function(value){

console.log(value)// 1

return value + 1

})

.then(function(value){

console.log(value)// 2

})

then方法中的onFulfilled函式,也就是第一個傳入的函式參數,它是有值時使用的函式,經過連鎖的結構,如果要把值往下傳遞,可以用回傳值的方式,讓這個值可以繼續的往下面的then方法傳送。

?

那如果不用Promise,直接用callback會怎么樣呢?

?

function doA(doB){

doB(1,doC)

}

function doB(val,doC){

doC(val+1)

}

function doC(val){

console.log(val);

}

doA(doB);

是不是看起來有點痛苦,而且我們還沒加上如果失敗時的函式呢(bargaintravel4u)!

?

今天就先到這邊,如果有錯誤歡迎留言指正,明天會說明Promise失敗時的函式用法!

轉載于:https://www.cnblogs.com/lannyQ-Q/p/9985846.html

總結

以上是生活随笔為你收集整理的学JS的心路历程-Promise(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。