使用promise解决回调地狱_「每日一题」Promise 是什么?
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 來說去用戶數(shù)據(jù),它接收兩個(gè)回調(diào) sucessCallback 和 errorCallback:
function getUser(successCallback, errorCallback){$.ajax({url:'/user',success: function(response){successCallback(response)},error: function(xhr){errorCallback(xhr) }}) }看起來還不算復(fù)雜。
如果我們獲取用戶數(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('獲取用戶信息失敗') })三層回調(diào),如果再多一點(diǎn)嵌套,就是「回調(diào)地獄」了。
Promise 來了
Promise 的思路呢,就是 getUser 返回一個(gè)對(duì)象,你往這個(gè)對(duì)象上掛回調(diào):
var promise = getUser() promise.then(successCallback, errorCallback)當(dāng)用戶信息加載完畢,successCallback 和 errorCallback 之一就會(huì)被執(zhí)行。
把上面兩句話合并成一句就是這樣的:
getUser().then(successCallback, errorCallback)如果你想在用戶信息獲取結(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 寫法跟前面的回調(diào)看起來其實(shí)變化不大。
真的,Promise 并不能消滅回調(diào)地獄,但是它可以使回調(diào)變得可控。你對(duì)比下面兩個(gè)寫法就知道了。
getGroup(response.id, success2, error2)getGroup(response.id).then(success2, error2)用 Promise 之前,你不能確定 success2 是第幾個(gè)參數(shù);
用 Promise 之后,所有的回調(diào)都是
.then(success, error)這樣的形式。
以上是 Promise 的簡介,想完整了解 Promise,請(qǐng)參考下面的自學(xué)鏈接。
Promise對(duì)象 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha)
總結(jié)
以上是生活随笔為你收集整理的使用promise解决回调地狱_「每日一题」Promise 是什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开通京东小金库有什么用?小金库的钱怎么用
- 下一篇: 京东存小金库开白条什么意思?划算吗?