2012-05-06 5 views
3

に定義する私は、「定義」コールを延期したいのですが、ファイルに一度、コールバックを実行しているRequireJSがロードされますRequireJSは:たとえば...「定義されて」いないとき、私のモジュールでは、コールバック

a.jsを:

require(['b'], function(b){ 
    console.log(b); 
}); 

b.js:

define({'foo':'bar'}); 

これは予想される書き込み対象{FOO:バー}として働きます。 しかし、私が移動した場合、繰延機能に "定義":

b.js:

setTimeout(function(){ 
    define({'foo':'bar'}); 
}, 1000); 

を、次に(B)にconsole.logは "ヌル" を書き込みます。

どういうところが間違っていますか?あなたが処理するa.jsにコールバック関数を設定することができ、このパターンを使用して

//a.js 
require(['b'], function(b){ 
    b.getData(
    function(data) { 
     console.log(data); 
    } 
); 
}); 

//b.js 
define(function(){ 
    this.getData = function(callback) { 
     setTimeout(function(_callback){ 
      return function() { 
       _callback({'foo':'bar'}); 
      } 
     }(callback), 1000);  
    } 
    return this; 
}); 

+0

さて、あなたは定義を1秒遅らせる必要があります、そして、そのタイマが期限切れになる前にそれを要求しようとしています。定義モジュールを遅らせている理由を尋ねることはできますか? –

+0

これは単なるケースの1つです。モジュールが準備完了になるために必要な、ajax要求またはその他の非同期処理によって遅延が発生する可能性があります。 – Buncha

+0

Ajax /非同期ロジックを担当するモジュールを作成する方が意味があります。そのようにすれば、ただ必要とすることができ、それが提供するメソッドを使って非同期のものをトリガーすることができます。 –

答えて

0

は、私は任意の遅延や延期が定義関数の内部起こるべきか、このようないくつかのコールバックのパターンを使用することができることを考えますb.jsからの遅れた答え

希望すると、これが役に立ちます。

+0

ありがとう、私はこれのように既にこれをやった。しかし、私は、要求側が遅れについて何も知らないときに、途中で定義しようとしました... – Buncha

関連する問題