這篇文章主要介紹了JavaScript中Promise的使用,特別jQuery的promise使用是當(dāng)下開(kāi)發(fā)圈中的熱門(mén),需要的朋友可以參考下
摘錄 – Parse Java
“Promises” 代表著在javascript程序里下一個(gè)偉大的范式,但是理解他們?yōu)槭裁慈绱藗ゴ蟛皇羌?jiǎn)單的事。它的核心就是一個(gè)promise代表一個(gè)任務(wù)結(jié)果,這個(gè)任務(wù)有可能完成有可能沒(méi)完成。Promise模式唯一需要的一個(gè)接口是調(diào)用then方法,它可以用來(lái)注冊(cè)當(dāng)promise完成或者失敗時(shí)調(diào)用的回調(diào)函數(shù),這在CommonJS Promises/A proposal.大體講到了。比如,我想保存一個(gè)Prase.Object對(duì)象,這是個(gè)異步操作,在舊的回調(diào)范式中,你的代碼可能這樣寫(xiě):
?
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范式中,同樣的代碼你可以這樣寫(xiě): object.save({ key: value }).then( function(object) { // the object was saved. }, function(error) { // saving the object failed. });沒(méi)有多大的區(qū)別?那么有啥大不了的地方呢?好吧,promises的真正強(qiáng)大之處在于多重的鏈接,當(dāng)調(diào)用promise.then(func)時(shí)返回一個(gè)新的promise,它不會(huì)執(zhí)行直到上一個(gè)完成。但是這里有一種特殊的情況,如果我的回調(diào)通過(guò)then返回一個(gè)新的promise,那么通過(guò)then返回的promise將不會(huì)執(zhí)行,直到回調(diào)執(zhí)行完成。詳細(xì)細(xì)節(jié)請(qǐng)參考 Promises/A+,這是個(gè)復(fù)雜的規(guī)則,通過(guò)例子我們能更清楚的認(rèn)識(shí)下.
假設(shè)你寫(xiě)了段登陸的代碼,查找對(duì)象然后更新它。在舊的回調(diào)范式中,你可以使用金字塔式的代碼完成:
?
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. } }); } }); } });這看起來(lái)已經(jīng)很可笑,更可笑的是甚至沒(méi)有任何錯(cuò)誤處理。但是promise鏈?zhǔn)降慕Y(jié)構(gòu),使代碼看起來(lái)更舒服了:
?
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. });新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注