[英]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.