使用promise解决回调地狱_「每日一题」Promise 是什么?
window.Promise 已經是 JS 的一個內置對象了。
1. Promise 有規格文檔嗎?
2. 你一般如何使用 Promise。
-----------
目前的 Promise 都遵循 Promises/A+ 規范。
英文規范:https://promisesaplus.com/
中文翻譯:圖靈社區 : 閱讀 : 【翻譯】Promises/A+規范
看完規范你可以了解 Promise 的全貌,本文主要講講 Promise 的用途。
Promise 之前的時代——回調時代
假設我們用 getUser 來說去用戶數據,它接收兩個回調 sucessCallback 和 errorCallback:
function getUser(successCallback, errorCallback){$.ajax({url:'/user',success: function(response){successCallback(response)},error: function(xhr){errorCallback(xhr) }}) }看起來還不算復雜。
如果我們獲取用戶數據之后還要獲取分組數組、分組詳情等,代碼就會是這樣:
getUser(function(response){getGroup(response.id, function(group){getDetails(groupd.id, function(details){console.log(details)},function(){alert('獲取分組詳情失敗')})}, function(){alert('獲取分組失敗')})}, function(){alert('獲取用戶信息失敗') })三層回調,如果再多一點嵌套,就是「回調地獄」了。
Promise 來了
Promise 的思路呢,就是 getUser 返回一個對象,你往這個對象上掛回調:
var promise = getUser() promise.then(successCallback, errorCallback)當用戶信息加載完畢,successCallback 和 errorCallback 之一就會被執行。
把上面兩句話合并成一句就是這樣的:
getUser().then(successCallback, errorCallback)如果你想在用戶信息獲取結束后做更多事,可以繼續 .then:
getUser().then(success1).then(success2).then(success3)請求成功后,會依次執行 success1、success2 和 success3。
如果要獲取分組信息:
getUser().then(function(response){getGroup(response.id).then(function(group){getDetails(group.id).then(function(){},error3)},error2) }, error1)這種 Promise 寫法跟前面的回調看起來其實變化不大。
真的,Promise 并不能消滅回調地獄,但是它可以使回調變得可控。你對比下面兩個寫法就知道了。
getGroup(response.id, success2, error2)getGroup(response.id).then(success2, error2)用 Promise 之前,你不能確定 success2 是第幾個參數;
用 Promise 之后,所有的回調都是
.then(success, error)這樣的形式。
以上是 Promise 的簡介,想完整了解 Promise,請參考下面的自學鏈接。
Promise對象 -- JavaScript 標準參考教程(alpha)
總結
以上是生活随笔為你收集整理的使用promise解决回调地狱_「每日一题」Promise 是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开通京东小金库有什么用?小金库的钱怎么用
- 下一篇: 登录不上_《盗贼之海》登录不上?还在傻傻