在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)庫  HTML/ Node查詢mongo時雙重回調(diào)讀取報錯

Node查詢mongo時雙重回調(diào)讀取報錯

router.js中

//顯示某一個用戶的個人主頁
exports.showUser = function(req,res,next){
    var user = req.params["user"];
    db.find("posts",{"username":user},function(err,result){
        db.find("users",{"username":user},function(err,result2){
            console.log(result2);
            res.render("user",{
                "login": req.session.login == "1" ? true : false,
                "username": req.session.login == "1" ? req.session.username : "",
                "user" : user,
                "active" : "我的說說",
                "cirenshuoshuo" : result,
                "cirentouxiang" : result2[0].avatar
            });
        });
    });

}

我這里console.log(result)打印出了信息啊,

clipboard.png

下面定位到的代碼
router.js:330:45 就是上面那個代碼
db.js:94:17 :

exports.find = function (collectionName,json,C,D) {
    var result = [];   //結(jié)果數(shù)組
    //JS沒有函數(shù)重載,只能手動實現(xiàn)
    if(arguments.length == 3) {
       //如果沒有傳args
        //那么參數(shù)C就是callback,參數(shù)D沒有傳。
        var callback = C;
        var skipnumber = 0;
        //數(shù)目限制,limit(0)就是沒有限制
        var limit = 0;
    }else if(arguments.length == 4) {
        var args = C;
        var callback = D;
        //應(yīng)該省略的條數(shù)
        var skipnumber = args.pageamount * args.page || 0;
        //數(shù)目限制
        var limit = args.pageamount || 0;
        //排序方式
        var sort = args.sort || {};
    }else {
        throw new Error("find函數(shù)的參數(shù)個數(shù),必須是3個,或者4個");
        return;
    }
    //從第零頁開始
    // console.log("略過了"+skipnumber+"條"+"限制在"+limit+"條");
    //鏈接數(shù)據(jù)庫,鏈接之后查找所有
    _connectDB(function (err,db) {
        var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);
        cursor.each(function (err, doc) {
            if(err) {
                callback(err,null);
                db.close();
                return;
            }
           if(doc != null) {
               result.push(doc); //放入結(jié)果數(shù)組
           }else {
               //遍歷結(jié)束,沒有更多的文檔
                callback(null,result);
               db.close();//關(guān)閉數(shù)據(jù)庫
           }
        });
    });
}

clipboard.png

不能幫忙的進來給點提示,解決Bug技巧也行啊。

回答
編輯回答
礙你眼

async和await傳一個隱性Promise可以解決雙重回調(diào)問題

2017年1月25日 13:29
編輯回答
無標(biāo)題

看這個報錯信息應(yīng)該是你的result2[0]是undefined,那么很有可能是你在user這個db里沒有找到符合條件的result2
具體你可以先吧render里的cirentouxiang字段去掉,打印下result2,這樣應(yīng)該可以定位出問題所在
我又看了下你的打印信息,仔細看,你的報錯的上面是一個空數(shù)組[],所以肯定會報錯的

2018年7月3日 09:37