這篇文章主要介紹了JavaScript中Promise的使用,特別jQuery的promise使用是當下開發圈中的熱門,需要的朋友可以參考下
摘錄 – Parse Java
“Promises” 代表著在javascript程序里下一個偉大的范式,但是理解他們為什么如此偉大不是件簡單的事。它的核心就是一個promise代表一個任務結果,這個任務有可能完成有可能沒完成。Promise模式唯一需要的一個接口是調用then方法,它可以用來注冊當promise完成或者失敗時調用的回調函數,這在CommonJS Promises/A proposal.大體講到了。比如,我想保存一個Prase.Object對象,這是個異步操作,在舊的回調范式中,你的代碼可能這樣寫:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 object.save({ key: value }, { success:function(object) { // the object was saved. }, error:function(object, error) { // saving the object failed. } }); 在新的Promise范式中,同樣的代碼你可以這樣寫: object.save({ key: value }).then( function(object) { // the object was saved. }, function(error) { // saving the object failed. });沒有多大的區別?那么有啥大不了的地方呢?好吧,promises的真正強大之處在于多重的鏈接,當調用promise.then(func)時返回一個新的promise,它不會執行直到上一個完成。但是這里有一種特殊的情況,如果我的回調通過then返回一個新的promise,那么通過then返回的promise將不會執行,直到回調執行完成。詳細細節請參考 Promises/A+,這是個復雜的規則,通過例子我們能更清楚的認識下.
假設你寫了段登陸的代碼,查找對象然后更新它。在舊的回調范式中,你可以使用金字塔式的代碼完成:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 Parse.User.logIn("user","pass", { success:function(user) { query.find({ success:function(results) { results[0].save({ key: value }, { success:function(result) { // the object was saved. } }); } }); } });這看起來已經很可笑,更可笑的是甚至沒有任何錯誤處理。但是promise鏈式的結構,使代碼看起來更舒服了:
?
1 2 3 4 5 6 7 Parse.User.logIn("user","pass").then(function(user) { returnquery.find(); }).then(function(results) { returnresults[0].save({ key: value }); }).then(function(result) { // the object was saved. });新聞熱點
疑難解答