2017-08-07 13 views
0

私はJavascriptを初めて使用しています。関数内に関数を書き込もうとしていますが、常に定義されていません。なぜ私はいつも未定義に戻っていますか?

function csnotebook(){ 
    function calculate_mw(peptide){  
     var total_mw=0;         
     var split_peptide = peptide.split("-"); 
     // Check if the blog id is found in database 
     Aa.findOne({ three_letter: split_peptide[1] }, (err, aa) => { 
     // Check if the id is a valid ID 
      if (!aa) { 
       console.log("wrong aa"); 
      }else{ 
       total_mw += aa.mw; 
      } 
      return total_mw; 
     }); 
    } 
    var publicAPI = {       
     mw: calculate_mw     
    }; 

    return publicAPI; 
} 
var fred = csnotebook(); 
var totalmw = fred.mw("Ala-Cys"); 
console.log(totalmw); 

私は、対応する値は、データベースからMW見つけることができると仮定し、しかしtotalmw、私はいつも誰もがなぜ知っている、いくつかのresonのための未定義のですか?ありがとうございました!!

+0

は「それは常に未定義示し、」どのようなショー未定義の? – Dekel

+0

@zzzzbov VTCが時期尚早であった可能性があります。 'Aa.findOne()'が非同期であることを確実に知っていますか? –

+0

@zzzzBov私は 'Aa.findOne'が非同期であるとは確信していません。 – Dekel

答えて

0

内部関数calculate_mwは何も返しません。何かを返さない限り、関数の戻り値はundefinedです。

あなたはAa.findOneあなたがすべき結果戻したい場合:

return Aa.findOne(... 
関連する問題