nodejs从回调返回

时间:2013-04-27 13:00:54

标签: javascript node.js callback

人。我无法通过js回调返回解决一些问题。 所以,我们有下一个功能:

     //Функция получения контакт листа пользователя
        function get_contact_list(data) {
            //Берем ID пользователя, который к нам пытается обратиться исходя из SESSION_ID
            conn.query('SELECT id FROM users WHERE session_id="' + data['auth'] + '" LIMIT 1;', function(err, res) {
                if (err) {
                    console.log(err);
                }
                //Разбираем результат
                res.fetchAll(function(err, row) {
                    if (err) {
                        console.log(err);
                    }
                    //А теперь, собсна, выбираем контакты
                    conn.query('SELECT u.id, u.sname, u.fname, u.nick FROM users as u LEFT JOIN contacts AS c ON c.dep_id = u.id WHERE owner_id =' + row[0].id + ';', function(err, res) {
                        if (err) {
                            console.log(err);
                        }
                        //Разбираем результат
                        res.fetchAll(function(err, row) {
                            if (err) {
                                console.log(err);
                            }
                            //TAKE row HEREOF
                            NEED_OUT = row;
                        });
                    });
                });
            });
            return NEED_OUT;
        }

我需要从2-lvl回调中返回变量行,但如果我在全局对象中创建全局变量或写“行”,则它无法正常工作。帮帮我!谢谢!

1 个答案:

答案 0 :(得分:3)

我相信你没有正确的异步代码概念。因为你的例子很长,这里有一些伪代码,可以显示异步代码的工作顺序。

// Timestamp: 0
function foo(input, cb) {
    // Timestamp: 2
    doSomeThingAsync(input, (result) {
        // Timestamp: 5
        result = transformResultSync(result);
        cb(result);
    });
    // Timestamp: 3
}
// Timestamp: 1
foo('bar', function(result) {
    // Timestamp: 6
    console.log(result);
});
// Timestamp: 4

我希望它有所帮助。