函数返回2个值 - 回调问题?

时间:2014-01-04 22:06:00

标签: javascript sql-server node.js

我正在使用推送通知服务器(基于NodeJS),该服务器将数据存储在MS SQL数据库中。我需要的一个功能是检查设备是否已在我的数据库中注册。我这样编码 - 控制台信息用于调试目的:

function deviceExists(devicetoken, shopguid) {
    sql.connect(config, function(err) {

        if (err) {
            console.log('Error: ' + err);
        }
        else {
            var request = new sql.Request();
            request.query("select top 1 devicetoken from notifications where devicetoken='" + devicetoken + "' and shopguid='" + shopguid + "'", function(err, recordset) {
                if (err) {
                    console.log('Error: ' + err);
                }
                else {
                    console.log('Records: ' + recordset.length)
                    if (recordset.length === 0) {
                       console.log('recordset.length === 0, returning false device does not exist');
                       return false;
                    } else {
                       console.log('recordset.length !== 0, returning true device does exist');
                       return true;
                    }
                }
            });
        }

    });
    console.log("Something went wrong, return true");
    return true;
}

发生的事情是我总是会返回值。首先是函数结束时的true,然后是我检查记录集长度的真或假。我想我遇到了回调问题,但我不知道如何解决它。

我花了很长时间才能让它工作,它必须是我有限的JavaScript知识阻止我让它工作。我希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

以下是在您自己的函数中使用异步函数调用的示例:

function someFunc( data1, data2, callback ) {

    db.query("SELECT * FROM table1 WHERE id=?", [data1], function( err, results ) {
        callback( results );
    }); 

}

看看那里发生了什么?我的函数'someFunc'不会返回任何内容,它取决于回调对象(这是一个函数)在db查询内联函数回调完成后返回结果。

它会像这样使用:

someFunc( 32, 54, function ( results ) {
    // results contains the results of the db query
    results.forEach (...);
});