日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術 > NodeJS Multiple Callback解決之使用Q Promises

NodeJS Multiple Callback解決之使用Q Promises

來源:程序員人生   發(fā)布時間:2014-12-15 09:30:47 閱讀次數(shù):3742次

在上1篇《Javascript Promises模式――相當酷的Callback Hell終結者》我們介紹了Javascript的Promise模式,接著我們就把Javascript Promise用到我們的代碼中。

JavaScript Promise庫 Q

之前試著用過Q,但是沒有成功。或說,在那時候不需要用上Q,所以沒有深究。現(xiàn)在抱著學習的態(tài)度,重新試了1下,效果還不錯。

A tool for making and composing asynchronous promises in JavaScript

Q是1個提供制作和創(chuàng)作異步Promise的JavaScript工具。Q 提供了1些輔助函數(shù),可以將Node和其他環(huán)境適配為promise可用的。

轉載保存: 《NodeJS Multiple Callback解決之使用Q Promises》

JavaScript Promise庫 Q示例

官網給了1個簡單的轉換的說明

step1(function (value1) { step2(value1, function(value2) { step3(value2, function(value3) { step4(value3, function(value4) { // Do something with value4 }); }); }); });

將他轉換為

Q.fcall(promisedStep1) .then(promisedStep2) .then(promisedStep3) .then(promisedStep4) .then(function (value4) { // Do something with value4 }) .catch(function (error) { // Handle any error from all above steps }) .done();

但是,我們沒有看懂,我們到底做了些甚么。。

JavaScript Promise 庫 Q實戰(zhàn)

原生的代碼是這模樣的,用的是async庫

async.parallel([ function () { 'use strict'; pr.get(domain, next); }, function () { 'use strict'; gs.get(name, next); }, function () { 'use strict'; csdn.get(name, next); }, function () { 'use strict'; zhihu.get(name, next); }, function () { 'use strict'; alexa.get(domain, next); } ]);

但是總感覺寫得有點亂,不過最少離開了所謂的回調大坑。

進程大致上就是當我們需要不斷往我們的result里面添加東西。

因而將代碼改成Promise的情勢,接著就變成這樣了

github.promise_get(response, name) .then(function (result) { return pr.promise_get(result, domain); }) .then(function (result) { return csdn.promise_get(result, name); }) .then(function (result) { return zhihu.promise_get(result, name); }) .then(function (result) { return alexa.promise_get(result, domain); }) .then(function (result) { callback(result); });

但是這樣看上去寫得有點不好,由于我們將進程固化在代碼中,因而試著,用別的方法對其重構。

重構的第1步后就變成這模樣

var info = Information.prototype; info.pageRank_get = function(result){ 'use strict'; return pageRank.promise_get(result, Information.prototype.domain); }; info.alexa_get = function(result){ 'use strict'; return alexa.promise_get(result, Information.prototype.domain); }; info.csdn_get= function (result) { 'use strict'; return csdn.promise_get(result, info.name); }; info.github_get= function (result) { 'use strict'; return github.promise_get(result, info.name); }; info.zhihu_get = function (result) { 'use strict'; return zhihu.promise_get(result, info.name); }; info.initVal = function (result) { 'use strict'; result = []; return result; }; Information.prototype.get = function (callback) { 'use strict'; Q.fcall(info.initVal) .then(info.github_get) .then(info.csdn_get) .then(info.zhihu_get()) .then(info.pageRank_get) .then(info.alexa_get) .then(function (result) { callback(result); }); };

先提出每個方法,然后我們就能夠選擇我們需要用到的庫。看上去比上面整潔多了,但是我們還需要下1步,以便繼續(xù)。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲三级在线播放 | 青青草这里只有精品 | 九九热视频在线观看 | 99久久久无码国产精品 | 国产一区在线免费观看 | 欧美日韩视频一区二区 | 欧美黄色大片在线观看 | www.黄色一级片 | 久久精品国产亚洲7777 | 亚洲成色999久久网站 | 国产伦精品一区二区三 | 国产原创精品视频 | 日本精品一区二区三区视频 | 午夜日韩 | 久久国产精品一区二区三区 | 在线视频成人 | 99精品欧美一区二区三区 | 国产高清一区 | 国产精品久久久久久久久久99 | 欧美成人免费 | 日本中文字幕在线观看 | 国产1区| 国产精品美女久久久久av超清 | 欧美精品在线一区二区三区 | 欧美一区二区久久久 | 国产19页| 福利视频网址 | 国产69精品久久久久777 | 懂色av蜜臀av粉嫩av分享吧 | 黄色大片免费看 | 精品视频久久久久久 | 成人黄色毛片视频 | 久久久久久久一区 | 久草成人网 | 亚洲二区在线视频 | 欧美精品网 | 国产二区三区 | 国产一区精品在线 | 国产精品久久久久久一级毛片 | cao久久| 精品成人在线视频 |