2017-08-29 16 views
-1

コールバックを使用すると、結果が返されるまで関数が待機することになりますが、コードを実行したい場合はどうすればよいでしょうか?Nodejs - 変数を待っている:コールバック

以下は、私が実行しようとしているものの例です。 isAvailableは、アカウントに十分な残高があるかどうかを確認し、お金を引き出すことができる場合はtrueを返します。

私の問題は、この関数が非同期に実行されるため、if文が実行される前に残高が返されるのを待たないということです。if文を別の関数に分けてコールバックを使用して残高を待ちますか?もしそうなら、どうすればいいのですか?

function isAvailable(user, withdrawal, callback) { 
    var balance = getBalance(user, callback); 
    if (withdrawal > balance) { 
    callback(false); 
    } else if (withdrawal < balance) { 
    callback(true); 
    } 
} 
+0

を*私が持っていますgetBalanceがretuしないという不機嫌な疑惑バランス期間。 X/Y問題。 –

+0

getBalanceが試されてテストされていますが、それは動作します:) – Sprout

+0

**証明します。** :)返されたときに存在しない値を返すことはできません。 –

答えて

4

私は、コールバックを使用すると、結果は非同期なのでいいえ、彼らはすぐに(何を)返さないことを意味し

結果を返す前に返却されるまで機能が待機することを意味することを理解して後でその結果でコールバック関数を呼び出します。

あなたの例では、あなたがいないgetBalanceの戻り値としてbalanceを取得していますが、2番目の引数として渡す必要があり、コールバック関数の呼び出しの引数としてましょう:

インサイド
getBalance(user, function(balance) { 
    … 
}); 

そこに、あなたが実行するために、さらにコード配置されます:「私の問題は、文が実行されている場合、それは前に返されるバランスを待ちませんので、この関数は非同期で実行されるということである」*

function isAvailable(user, withdrawal, callback) { 
    getBalance(user, function(balance) { 
     if (withdrawal > balance) { 
      callback(false); 
     } else if (withdrawal < balance) { 
      callback(true); 
     } else { // if (withdrawal == balance) 
      callback(null); // don't forget this 
     } 
    }); 
} 
+0

ああ、ありがとう。私はあなたが書いたコードを適用しましたが、今はnullを返します。どんな考え? – Sprout

+0

@Sprout「返品」とはどういう意味ですか?コールバックは 'null'で呼び出され、' isAvailable'関数は常に 'undefined'(' null'ではなく)を返します。あなたはどうしたの? – Bergi

+0

isAvailableが呼び出されると、コールバックはnullを返します。私はそれをユーザー、金額、関数を使って呼び出しますが、コールバックはnullです。私はnullを呼び出すことがセーフティネットだと思った? – Sprout

関連する問題