Node.js之Promise維護(同步)多個回調(異步)狀態


金天:學習一個新東西,就要持有擁抱的心態,如果固守在自己先前的概念體系,就會有舉步維艱的感覺。
.NET程序員初用node.js最需要適應的就是異步開發, 全是異步,常規邏輯下遍歷列表都是異步,如何保證列表遍歷執行完畢?Promise幫你搞定!
金天微信:15998603918 歡迎找我聊聊天。

 

Node.js編程,清一色的回調。

如果沒有Promise, 一連串的業務邏輯,從第一步回調到最后一步,“單線程邏輯”還搞的定,遭遇“多線程邏輯”,便陷入回調地獄。

自從有了Promise, 一切都不在是問題!

 

應用場景舉例:

在一個請求完成查詢MonogoDB的所有Collection並統計Document數量。

 

具體查詢邏輯
1. listDatabases(callback)

2. 遍歷collections, 分別查詢Documents數量, count(callback)

3. 返回collections.

代碼:

function(req, res){
    var db = ms.connection.db;
    var tables = db.listCollections().toArray();
    //Promise#then變回調為常規寫法,但仍然是異步執行
    tables.then(function(rs){
        var ps = [];
        rs.forEach(function(collection){
            ps.push(db.collection(collection.name).count().then(function(count){
                collection.itemCount = count;
            }));

        });
        
        //Promise.all 確保所有collection.itemCount都被查詢出來,起到同步的作用
        Promise.all(ps).then(function(){
            res.send(rs);
        });
    });

}

  上面為非完整代碼,不能直接拿來使用,僅作為相關業務思路、解決方案的參考。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM