2012-05-06 36 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); 

然後執行console.log(b)將 「空」。

怎麼了?

+0

好吧,你延遲了1秒的定義,並且要求在定時器到期之前請求它。我能問你爲什麼延遲定義模塊嗎? –

+0

這只是可能的情況之一。延遲可能是由模塊準備就緒所需的ajax請求或任何其他異步進程造成的。 – Buncha

+0

創建一個負責Ajax /異步邏輯的模塊會更有意義。這樣你可以只需要它,並使用它提供的方法來觸發任何異步的東西。 –

回答

0

我認爲,任何拖延或延遲應該發生的定義函數內部,或者你可以使用一些像這樣的回調格局:

//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; 
}); 

使用這個模式,你可以在a.js處理設置回調函數來自b.js的延遲答案

希望這可以幫助你。

+0

謝謝,我已經這樣做了。但我試圖定義,當需求方對延遲一無所知時...... – Buncha