簡體   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