2011-09-27 89 views
2

我希望我的誓言能夠訪問我的主題中的outerDocs和innerDocs,但事實並非如此。異步嵌套主題 - 範圍問題

'ASYNC TOPIC': { 
    topic: function() { 
    aModel.find({}, this.callback); 
    }, 
    'NESTED ASYNC TOPIC': { 
    topic: function(outerDocs) { 
     anotherModel.find({}, this.callback(null, innerDocs, outerDocs)); 
    }, 
    'SHOULD HAVE ACCESS TO BOTH SETS OF DOCS': function(err, innerDocs, outerDocs) { 
     console.log(err, innerDocs, outerDocs); 
     return assert.equal(1, 1); 
    } 
    } 

我在做什麼錯?

+0

'我在做什麼錯了?':一方面,您將此問題標記爲Java問題,而不是它。您瞭解Java和Javascript與火腿對倉鼠密切相關。 –

回答

1

你不能像這樣設置回調參數,查找功能會自己做。取而代之:

topic: function(outerDocs) { 
    var self = this; 
    anotherModel.find({}, function(err, docs) { 
    self.callback(err, docs, outerDocs); 
    }); 
}, 
+1

認爲這會工作,當我讀它,但誓言似乎並不支持處理回調這種方式。 (測試只是沒有錯誤消息的炸彈。)文檔中有類似的示例(將args添加到this.callback等),但同步示例似乎不直接操縱回調的參數。不知道爲什麼。 – Roxicus

+0

對於任何人來說,通過使用ECMA 5的綁定方法可以解決這個問題。所以你可以這樣做:anotherModel.find({},this.callback.bind(this,null,outerDocs),然後在你的誓言:函數(_,outerDocs,err,innerDocs)等。綁定prepends額外的參數,所以他們有 – Roxicus

+0

如果你的測試只是在沒有錯誤信息的情況下進行轟炸,我認爲你遇到了另一個問題,我在我的代碼庫中使用了這個特定的模式,沒有任何崩潰。 – ctide