Как назначить результаты запроса объекту

#node.js #mongodb #sails.js #node-mongodb-native

#node.js #mongodb #sails.js #узел-mongodb-собственный

Вопрос:

Я пытаюсь передать данные результатов из функции запроса в объект. строка console.log(results) возвращает «неопределенный» результат. Что мне делать?

 module.exports = {

    show: function(req, res) {

        var results;
        User.native(function(err, User) {

            if(err) {                    
                console.log("There is no exist a User by _id");
            }

            User.findOne({'_id' : req.param('id')}, 
                    function(err, user) {
                      results = user;
            });

        });

        console.log(results);
        return res.view({ stuff : results });
    }
};
  

Ответ №1:

У вас проблема с асинхронностью, обратный вызов из findOne не обязательно выполняется в соответствии с остальной частью кода, поэтому вы переходите к console.log(results) results = user вызову before . Вы хотели бы изменить его на что-то вроде этого:

 show: function(req, res) {

    var results;
    User.native(function(err, User) {

        if(err) {                    
            console.log("There is no exist a User by _id");
        }

        User.findOne({'_id' : req.param('id')}, 
                function(err, user) {
                  results = user;

                 console.log(results);
                 // Send response or make a callback here
        });

    });
}
  

Комментарии:

1. Спасибо за вашу помощь. Потому что я не могу использовать «результаты» из собственной функции.

2. если вам действительно нужно выполнять работу последовательно, вы также можете рассмотреть возможность использования библиотеки async: github.com/caolan/async