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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用promise解决回调地狱_「每日一题」Promise 是什么?

發(fā)布時(shí)間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用promise解决回调地狱_「每日一题」Promise 是什么? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

window.Promise 已經(jīng)是 JS 的一個(gè)內(nèi)置對(duì)象了。

1. Promise 有規(guī)格文檔嗎?

2. 你一般如何使用 Promise。

-----------

目前的 Promise 都遵循 Promises/A+ 規(guī)范。

英文規(guī)范:https://promisesaplus.com/

中文翻譯:圖靈社區(qū) : 閱讀 : 【翻譯】Promises/A+規(guī)范

看完規(guī)范你可以了解 Promise 的全貌,本文主要講講 Promise 的用途。

Promise 之前的時(shí)代——回調(diào)時(shí)代

假設(shè)我們用 getUser 來(lái)說(shuō)去用戶(hù)數(shù)據(jù),它接收兩個(gè)回調(diào) sucessCallback 和 errorCallback:

function getUser(successCallback, errorCallback){$.ajax({url:'/user',success: function(response){successCallback(response)},error: function(xhr){errorCallback(xhr) }}) }

看起來(lái)還不算復(fù)雜。

如果我們獲取用戶(hù)數(shù)據(jù)之后還要獲取分組數(shù)組、分組詳情等,代碼就會(huì)是這樣:

getUser(function(response){getGroup(response.id, function(group){getDetails(groupd.id, function(details){console.log(details)},function(){alert('獲取分組詳情失敗')})}, function(){alert('獲取分組失敗')})}, function(){alert('獲取用戶(hù)信息失敗') })

三層回調(diào),如果再多一點(diǎn)嵌套,就是「回調(diào)地獄」了。

Promise 來(lái)了

Promise 的思路呢,就是 getUser 返回一個(gè)對(duì)象,你往這個(gè)對(duì)象上掛回調(diào):

var promise = getUser() promise.then(successCallback, errorCallback)

當(dāng)用戶(hù)信息加載完畢,successCallback 和 errorCallback 之一就會(huì)被執(zhí)行。

把上面兩句話(huà)合并成一句就是這樣的:

getUser().then(successCallback, errorCallback)

如果你想在用戶(hù)信息獲取結(jié)束后做更多事,可以繼續(xù) .then:

getUser().then(success1).then(success2).then(success3)

請(qǐng)求成功后,會(huì)依次執(zhí)行 success1、success2 和 success3。

如果要獲取分組信息:

getUser().then(function(response){getGroup(response.id).then(function(group){getDetails(group.id).then(function(){},error3)},error2) }, error1)

這種 Promise 寫(xiě)法跟前面的回調(diào)看起來(lái)其實(shí)變化不大。

真的,Promise 并不能消滅回調(diào)地獄,但是它可以使回調(diào)變得可控。你對(duì)比下面兩個(gè)寫(xiě)法就知道了。

getGroup(response.id, success2, error2)getGroup(response.id).then(success2, error2)

用 Promise 之前,你不能確定 success2 是第幾個(gè)參數(shù);

用 Promise 之后,所有的回調(diào)都是

.then(success, error)

這樣的形式。

以上是 Promise 的簡(jiǎn)介,想完整了解 Promise,請(qǐng)參考下面的自學(xué)鏈接。

Promise對(duì)象 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha)

總結(jié)

以上是生活随笔為你收集整理的使用promise解决回调地狱_「每日一题」Promise 是什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。