首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个函数的返回值会被忽略?

为什么这个函数的返回值会被忽略?
EN

Stack Overflow用户
提问于 2013-04-15 19:11:22
回答 1查看 51关注 0票数 0

我非常确定这里的问题是我还没有以必要的、异步的方式为Node.js思考。

我在模块db中有一个函数userExists(),它在传递电子邮件时检查用户是否在数据库中,并返回truefalse

相关部分:

代码语言:javascript
运行
复制
userExists : function(email) {
    var client = new pg.Client(app.conString);
    var query;
    var result = false;

    client.connect();

    query = client.query(
        "SELECT * FROM users WHERE email = $1",
        [email]
    );

    query.on('row', function(row) {
        result = true;
    });

    query.on('end', function() {
        client.end();
        return result;
    });

我这样叫它:

代码语言:javascript
运行
复制
if (!db.userExists(req.session.email)) {
        newUser();
    } else {
        updateUser();
    }
}

无论userExists()返回什么,调用的总是newUser()。我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-15 19:17:15

你把时间弄错了。查询在您的函数运行后完成,因此您需要传递一个回调函数并“等待”结果。

代码语言:javascript
运行
复制
userExists = function(email, cb) {
    var client = new pg.Client(app.conString);
    var query;
    var result = false;

    client.connect();

    query = client.query(
        "SELECT * FROM users WHERE email = $1",
        [email]
    );

    query.on('row', function(row) {
        result = true;
    });

    query.on('end', function() {
        client.end();
        cb(result);
    });
}


// Time 1: ask is the user exists
db.userExists(req.session.email, function(exists) {
    // Time 3: Yeah result came back
    if (exists) {
        updateUser()
    }
    else {
        newUser();
    }
});
// Time 2: I've asked, let's wait for the result
// The following code will likely be executed before you get the result back
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16013696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档