簡體   English   中英

調用節點js查詢異步映射功能

[英]Node js Query Async Map function is call

function(dataValue, cb) {
            req.app.db.models.User.find({
                _id: { $ne: dataValue._id }
            }, function(err, totalUser) {
                if (!err) {
                    var len = totalUser.length;
                    if (len !== 0) {
                        req.app.utility.async.map(totalUser, function(each, callback) {
                            console.log(each);
                            req.app.utility.async.mapSeries(each.nonregisterContact, function(element, callback1) {
                                console.log('element', element.number);
                                console.log('dataValue', dataValue.mobileNumber);
                                console.log('kolka', Number(element.number) === Number(dataValue.mobileNumber));
                                if (Number(element.number) === Number(dataValue.mobileNumber)) {
                                    each.registerContact.push(dataValue._id.toString());
                                    each.nonregisterContact.splice(element, 1);
                                    each.save(function(err, finalResult) {
                                        if (!err) {

                                        } else {
                                            console.log(err);
                                        }
                                    })
                                    callback1(null, null);
                                } else {
                                    callback1(null, null);
                                }
                            }, function(err, final) {
                                if (!err) {
                                    callback(null, null);
                                } else {
                                    console.log(err);
                                }

                            });

                        }, function(err, result) {
                            if (!err) {
                                console.log('2');
                                return cb(null, dataValue);
                            } else {
                                console.log(err);
                            }

                        });
                    } else {
                        return cb(null, dataValue);
                    }
                } else {
                    cb(err);
                }
            })
        }

在mapSeries方法最終回調中的each.save方法調用之后,我沒有任何響應。我正在嘗試此解決方案。我將如何做同樣的事情。 我該如何解決並處理這種情況?

我試圖簡化代碼,但不確定我的代碼是否能滿足您的需求。 我也不能測試它:D
dataValueeachelementfinalResult是非常通用的名稱,因此應謹慎使用它們,以確保代碼可讀/可支持。

// very bad idea is include other libraries to app
var async = require('async');
var db = require('db'); // this module must export connection to db
...
function (dataValue, cb) {
    // processUser use data from closure of current function => inside of current
    function processUser (user, callback) {
        async.mapSeries(user.nonregisterContact, function(contact, callback){
            // Check and exit if condition is not satisfied. It's more readable.
            if (Number(contact.number) !== Number(dataValue.mobileNumber)) 
                return callback(null); // ignore user

            user.registerContact.push(dataValue._id.toString());
            user.nonregisterContact.splice(contact, 1);
            user.save(function(err, finalResult) { // Is finalResult ignore?
                if (err)
                    console.log(err);
                callback(); // ingnore error
            })
    }, callback);

    db.models.User.find({_id: { $ne: dataValue._id }}, function(err, userList) {
        if (!err) 
            return cb(err);

        if (userList.length == 0)
            return cb(new Error('Users not found'));

        // use named function to avoid stairs of {}
        async.map(userList, processUser, cb);
    })
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM