-1

伙计们。我无法通过 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 回调返回变量行,但是如果我创建全局变量或在全局对象中写入“行”,它就不起作用。请帮帮我!谢谢!

4

1 回答 1

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

我希望它有一点帮助。

于 2013-04-27T18:23:40.047 回答