繁体   English   中英

函数的返回值始终是未定义的和顺序

[英]return value from function is always undefined and order

我尝试制作一个生成临时编号的函数,并验证它是否尚未使用,然后将其返回。

但是我得到了一个未定义的结果,我首先在该函数中的console.log中得到了函数的结果,而应该相反。

// function main()
console.log('The result of the function in the main() is ' + Bank_generateAccountNumber());

// function Bank_generateAccountNumber()
function Bank_generateAccountNumber()
{
    var account_number = Math.floor((Math.random() * 8999) + 1000);

    console.log('Bank_generateAccountNumber trying with this number: ' + account_number); 
    bdd.query('SELECT * FROM bank_accounts WHERE account_number = ?', gm.mysql.escape(account_number), function(e, d, f) 
    {
        if(!d.id) 
        {
            console.log("this number is available ! " + account_number);
            return account_number;
        }

        console.log("this number is already used ! " + account_number);
        Bank_generateAccountNumber();
        return 0;
    });  
}

我正在写这篇文章,即使我没有连接到mysql,我也看到“ main()函数的结果未定义”,并且由于“ d.id”是没有定义的。

图片错误

我想先获取console.log(在函数中),然后获取函数的结果。

你有什么主意吗? 谢谢

我修改了您的函数,以使用Q库使用延期的Promise。 正如Naresh Walia在评论中所写,您拥有一个以上的图书馆来这样做:

 var q = require('q'); Bank_generateAccountNumber().then(function(response) { console.log('The result of the function in the main() is ' + response); }) function Bank_generateAccountNumber() { var response = q.defer(); var account_number = Math.floor((Math.random() * 8999) + 1000); console.log('Bank_generateAccountNumber trying with this number: ' + account_number); bdd.query('SELECT * FROM bank_accounts WHERE account_number = ?', gm.mysql.escape(account_number), function(e, d, f) { if (!d.id) { console.log("this number is available ! " + account_number); response.resolve(account_number); } console.log("this number is already used ! " + account_number); Bank_generateAccountNumber(); }); return response.promise; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM