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

資訊專欄INFORMATION COLUMN

Q.js中的幾種創建promise對象的方法對比

fsmStudy / 2759人閱讀

摘要:的意思是,從字面意思來看是用了的方法,繼承原有的方法類,然后又添加了自己的某些私有方法。用來實現代碼如下的意思是,從字面意思來看是用了的方法。

世界上最遠的距離不是生與死的距離,而是文檔就在你面前,你依然不知道這個庫怎么用。

鄙人IQ不高,已經被Q.js虐了幾天。查看了github上kriskowal/q的文檔,現在把幾種看明白了的使用方法整理記錄下來,以下幾種方法可以把nodejs中包含callback回調的函數轉化為promise風格的代碼:

Q.nfcall

Q.nfapply

Q.defer

Q.denodeify

首先設定一個使用場景:預期將一個名叫foo.txt的文件讀入內存,然后將內容打印出來。

Q.nfcall

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

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,從字面意思來看是用了javascript的apply方法。與nfcall相似。用Q.nfapply來實現代碼如下:

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來實現的代碼如下:

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

以上三種方法,都存在一個麻煩的問題:如果我的需求場景變成了首先讀入foo.txt文件,然后根據文件中的內容來決定是否調用另一個文件,并且打印出另一個文件的內容。這種場景我們常常會在數據庫查找中用到——先查詢到某個id,然后在另一個庫中根據這個id查到其他某些字段的數據。這就涉及到鏈式調用。

上面的三種方法,如果在鏈式調用中我不想讓代碼變得冗余,寫一堆readB、readC……的方法(有些時候甚至究竟鏈式調用會經歷多少步,即要使用多少個then我們事先都不清楚,需要根據獲得的數據來動態決定)。

在這種情況下,使用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對象,就能把異步執行結果返回給下一個then()方法
    return fs_readfile("foo2.txt","utf-8");
}

從上面的分析看到,我們還能想到一些實用的場景,比如:需要批量下載一批圖片(圖片數量和文件名都不確定)之后,再做批量上傳,那么只需要寫兩個不同的then方法和兩個不同的promise實例,即可用鏈式調用的方式完成任務。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78333.html

相關文章

  • 異步讀取文件幾種姿勢

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

    chinafgj 評論0 收藏0
  • JS常用幾種異步流程控制

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

    Barry_Ng 評論0 收藏0
  • 異步請求與Fetch

    摘要:再談異步請求語言將任務的執行模式分成兩種同步和異步。通過對象及時監聽完成事件,執行事件回調函數不會堵塞程序運行。新的是異步請求的另一種方案,比起其復雜糅雜的寫法,能更簡潔的獲取到數據。提供了對和以及其他與網絡請求有關的對象的通用定義。 再談異步請求 Javascript語言將任務的執行模式分成兩種:同步(Synchronous)和異步(Asynchronous)。 在瀏覽器,耗時很長...

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

    摘要:在他的重學前端課程中提到到現在為止,前端工程師已經成為研發體系中的重要崗位之一。大部分前端工程師的知識,其實都是來自于實踐和工作中零散的學習。一基礎前端工程師吃飯的家伙,深度廣度一樣都不能差。 開篇 前端開發是一個非常特殊的行業,它的歷史實際上不是很長,但是知識之繁雜,技術迭代速度之快是其他技術所不能比擬的。 winter在他的《重學前端》課程中提到: 到現在為止,前端工程師已經成為研...

    羅志環 評論0 收藏0
  • 一名【合格】前端工程師自檢清單

    摘要:在他的重學前端課程中提到到現在為止,前端工程師已經成為研發體系中的重要崗位之一。大部分前端工程師的知識,其實都是來自于實踐和工作中零散的學習。一基礎前端工程師吃飯的家伙,深度廣度一樣都不能差。開篇 前端開發是一個非常特殊的行業,它的歷史實際上不是很長,但是知識之繁雜,技術迭代速度之快是其他技術所不能比擬的。 winter在他的《重學前端》課程中提到: 到現在為止,前端工程師已經成為研發體系...

    isaced 評論0 收藏0

發表評論

0條評論

fsmStudy

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<