国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Q.js中的幾種創(chuàng)建promise對(duì)象的方法對(duì)比

fsmStudy / 2772人閱讀

摘要:的意思是,從字面意思來(lái)看是用了的方法,繼承原有的方法類(lèi),然后又添加了自己的某些私有方法。用來(lái)實(shí)現(xiàn)代碼如下的意思是,從字面意思來(lái)看是用了的方法。

世界上最遠(yuǎn)的距離不是生與死的距離,而是文檔就在你面前,你依然不知道這個(gè)庫(kù)怎么用。

鄙人IQ不高,已經(jīng)被Q.js虐了幾天。查看了github上kriskowal/q的文檔,現(xiàn)在把幾種看明白了的使用方法整理記錄下來(lái),以下幾種方法可以把nodejs中包含callback回調(diào)的函數(shù)轉(zhuǎn)化為promise風(fēng)格的代碼:

Q.nfcall

Q.nfapply

Q.defer

Q.denodeify

首先設(shè)定一個(gè)使用場(chǎng)景:預(yù)期將一個(gè)名叫foo.txt的文件讀入內(nèi)存,然后將內(nèi)容打印出來(lái)。

Q.nfcall

nfcall的意思是:Nodejs Function Call,從字面意思來(lái)看是用了javascript的call方法,繼承原有的方法(類(lèi)),然后又添加了自己的某些私有方法。用Q.nfcall來(lái)實(shí)現(xiàn)代碼如下:

var fs_readfile=Q.nfcall(fs.readFile,"foo.txt","utf-8");
fs_readfile.then(readA);
function readA(data){
    console.log(data)
}
Q.nfapply

nfapply的意思是:Nodejs Function Apply,從字面意思來(lái)看是用了javascript的apply方法。與nfcall相似。用Q.nfapply來(lái)實(shí)現(xiàn)代碼如下:

var fs_readfile=Q.nfapply(fs.readFile,["foo.txt","utf-8"]);
fs_readfile.then(readA);
function readA(data){
    console.log(data)
}
Q.defer

用Q.defer來(lái)實(shí)現(xiàn)的代碼如下:

var promise=function(){
    var defer=Q.defer();
    fs.readFile("foo.txt","utf-8",defer.makeNodeResolver());
    return defer.promise;
}
function readA(data){
    console.log(data);
}
promise().then(readA);
Q.denodeify

以上三種方法,都存在一個(gè)麻煩的問(wèn)題:如果我的需求場(chǎng)景變成了首先讀入foo.txt文件,然后根據(jù)文件中的內(nèi)容來(lái)決定是否調(diào)用另一個(gè)文件,并且打印出另一個(gè)文件的內(nèi)容。這種場(chǎng)景我們常常會(huì)在數(shù)據(jù)庫(kù)查找中用到——先查詢(xún)到某個(gè)id,然后在另一個(gè)庫(kù)中根據(jù)這個(gè)id查到其他某些字段的數(shù)據(jù)。這就涉及到鏈?zhǔn)秸{(diào)用。

上面的三種方法,如果在鏈?zhǔn)秸{(diào)用中我不想讓代碼變得冗余,寫(xiě)一堆readB、readC……的方法(有些時(shí)候甚至究竟鏈?zhǔn)秸{(diào)用會(huì)經(jīng)歷多少步,即要使用多少個(gè)then我們事先都不清楚,需要根據(jù)獲得的數(shù)據(jù)來(lái)動(dòng)態(tài)決定)。

在這種情況下,使用Q.denodeify最合適:

var fs_readfile=Q.denodeify(fs.readFile)
fs_readfile("foo.txt","utf-8")
    .then(readA).then(readA)

function readA(data){
    console.log(data);
    //只要在這里返回新的promise對(duì)象,就能把異步執(zhí)行結(jié)果返回給下一個(gè)then()方法
    return fs_readfile("foo2.txt","utf-8");
}

從上面的分析看到,我們還能想到一些實(shí)用的場(chǎng)景,比如:需要批量下載一批圖片(圖片數(shù)量和文件名都不確定)之后,再做批量上傳,那么只需要寫(xiě)兩個(gè)不同的then方法和兩個(gè)不同的promise實(shí)例,即可用鏈?zhǔn)秸{(diào)用的方式完成任務(wù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/78333.html

相關(guān)文章

  • 異步讀取文件幾種姿勢(shì)

    摘要:臆想的針對(duì)讀取到的內(nèi)容進(jìn)行操作,比如打印文件內(nèi)容臆想中,讀取文件是有返回值的,將返回值,即文件內(nèi)容,賦給一個(gè)變量,然后決定對(duì)讀取到的內(nèi)容進(jìn)行相應(yīng)的操作,例如打印文件中的內(nèi)容。 臆想的 let fs = require(fs) function readFile(filename){ ... } let content = readFile(config.js) // 針對(duì)讀...

    chinafgj 評(píng)論0 收藏0
  • JS常用幾種異步流程控制

    摘要:雖然這個(gè)模式運(yùn)行效果很不錯(cuò),但是如果嵌套了太多的回調(diào)函數(shù),就會(huì)陷入回調(diào)地獄。當(dāng)需要跟蹤多個(gè)回調(diào)函數(shù)的時(shí)候,回調(diào)函數(shù)的局限性就體現(xiàn)出來(lái)了,非常好的改進(jìn)了這些情況。 JavaScript引擎是基于單線程 (Single-threaded) 事件循環(huán)的概念構(gòu)建的,同一時(shí)刻只允許一個(gè)代碼塊在執(zhí)行,所以需要跟蹤即將運(yùn)行的代碼,那些代碼被放在一個(gè)任務(wù)隊(duì)列 (job queue) 中,每當(dāng)一段代碼準(zhǔn)...

    Barry_Ng 評(píng)論0 收藏0
  • 異步請(qǐng)求與Fetch

    摘要:再談異步請(qǐng)求語(yǔ)言將任務(wù)的執(zhí)行模式分成兩種同步和異步。通過(guò)對(duì)象及時(shí)監(jiān)聽(tīng)完成事件,執(zhí)行事件回調(diào)函數(shù)不會(huì)堵塞程序運(yùn)行。新的是異步請(qǐng)求的另一種方案,比起其復(fù)雜糅雜的寫(xiě)法,能更簡(jiǎn)潔的獲取到數(shù)據(jù)。提供了對(duì)和以及其他與網(wǎng)絡(luò)請(qǐng)求有關(guān)的對(duì)象的通用定義。 再談異步請(qǐng)求 Javascript語(yǔ)言將任務(wù)的執(zhí)行模式分成兩種:同步(Synchronous)和異步(Asynchronous)。 在瀏覽器,耗時(shí)很長(zhǎng)...

    vibiu 評(píng)論0 收藏0
  • 一名【合格】前端工程師自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...

    羅志環(huán) 評(píng)論0 收藏0
  • 一名【合格】前端工程師自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系...

    isaced 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<