1

我对编程并不陌生,但我正在进入 Node.JS。我了解阻塞与非阻塞操作。我知道将事物推向非阻塞状态是 Good Thing™。我想了解的是如何确保,如果我异步推送事物,我如何确保程序在继续处理/返回之前收集了所有不同请求的所有数据?

下面是一些使用node-mysql 的示例代码。为了论证,它可以是任何东西(Mongo、MySQL、文件读取、http 请求等),因为我意识到 mysql 模块具有并行自身的能力。

function getUserInfo(userID, myDB){
    var users, profile, login;

    // Get all of the account data
    myDB.query("SELECT * FROM `users` WHERE `id`='"+userID+"' LIMIT 0,1", function(err, row){
        users = JSON.stringify(row);
    }

    // Get all of the profile data
    myDB.query("SELECT * FROM `profile` WHERE `id`='"+userID+"' LIMIT 0,1", function(err, row){
        profile = JSON.stringify(row);
    }

    // Find their last logged in IP
    myDB.query("SELECT `ip`,`date` FROM `login` WHERE `userid`='"+userID+"' ORDER BY DESC LIMIT 0,1", function(err, row){
        login = JSON.stringify(row);
    }

    // Do some other processing here... Once all mysql is done.

    return(users, profile, login);
}

这里的答案仅仅是将所有这些调用转储到Async.js并收工吗?

4

1 回答 1

1

是的,如果你需要一次做几件事,promise 库可以帮助你很好地完成它。此外,您不能简单地return在此功能的末尾。您需要接受回调(除非您的函数返回自己的承诺),然后在完成查询后调用该回调。您对 MySQL 的回调将在此函数返回很久之后发生。

最后,使用参数化查询来避免 SQL 注入攻击。

于 2013-07-28T17:45:40.883 回答