2012-02-08 9 views
2

後に実行されていることを確認してください:のNode.js:コードの一部は、このコードを考えると別の

c = new Customer 
c.entry phone,req #how to make sure it ends before the next piece of code? 

db.Entry.findOne {x: req.body.x}, (err,entry) -> 

がどのように私はc.entryが完了した後db.Entry.findOneのみが実行されていることを確認していますか?

class Customer 
  entry: (phone,req) -> 
+1

「エントリ」はどのように見えますか? –

+0

@muistooshort Entryは、Customerクラスのメソッドです。クラス エントリ:(電話番号、req) - > – donald

+1

コールバックを取るようにエントリを調整できますか? Entryが何をしているのかを知るためのメカニズムが必要であり、コールバックが主要なメカニズムです。 – dyoo

答えて

4

おそらくあなたentry方法は、非同期何か、それが終了したときに実行されるコールバックを持っている必要がありその何かをします。だから、ちょうどentryにコールバックを追加します。

class Customer 
    entry: (phone, req, callback = ->) -> 
    some_async_call phone, req, (arg, ...) -> callback(other_arg, ...) 

私はsome_async_callの引数のコールバックがあるか、entryに渡したいと思い何何のコールバックを知らないので、私はarg, ...を使用していますし、例示的なプレースホルダとしてother_arg, ...

entry: (phone, req, callback = ->) -> 
    some_async_call phone, req, callback 

そしてthuslyコールバックにdb.Entry.findOneコールを移動:some_async_callentryコールバックの引数が同じであったなら、あなたは(コメント欄にAaron Dufourノートとして)だけ言うことができる

​​ を

entryの中の詳細とコールバック引数は、もちろんentryが何をしているのか、そして何がsome_async_callであるかによって決まります。

非同期(Java | Coffee)スクリプトで何か起こるのを待つ必要があるときは、ほとんどの場合常にコールバックを追加することで問題を解決します。

+1

特に 'callback'ではなく' some_async_call'へのコールバックとして ' - > callback()'を渡す特別な理由はありますか?私は彼らが機能的に同等であると信じています。 –

+0

@AaronDufour: 'some_async_call'コールバックと' callback'が同じ引数を取る特定の場合(または 'callback'に関する限り一致します)、それらは同じになります。しかし、 'some_async_call'が何をするのか、そのコールバックが何を得るのかなどはわかりません。だから私はそれを綴る方がはっきりしていると思っていました。良い質問。 –

関連する問題