我有這個讓我瘋狂的「設計」問題。模塊返回異步初始化對象
我的目標是建立一個分離的RabbitMQ客戶端。它必須能夠初始化連接並「返回」創建的通道,以便我的發佈模塊可以使用它。
代碼看起來像這樣(我知道這不是更好的代碼,但我期望它用於此解釋)。
var createConnection = (function() {
var channel;
var connect = function(){
// amqp connect
// error handling
createChannel();
});
}
var createChannel = function(){
//amqpConn.createConfirmChannel...
}
//pseudo
return{
getChannel : function(){
if(!initiated)
connect();
return channel;
}
}
})();
module.exports = createConnection;
現在,重要的事情:
1 - 我知道這是不是要去工作,我知道爲什麼,它的簡化。
2-我知道我可以通過使用異步或承諾來實現我的目標。
3-也許沒有意義去耦兔子客戶端,但對於瞭解目的
這就是說,我的問題:
1 - 有什麼辦法,我可以做到這一點,而無需使用其他模塊?
2-如果是這樣,可以花哨和時尚的方式完成?
3-是否有任何奇特的解決方案,允許第三方代碼執行簡單的「發佈(交換,渠道,味精)」確定連接已建立?
我覺得能夠與JS一起工作,但有時你只需要做一件事情,只知道你可以,但這讓我頭痛。
真正的感謝,我希望這個問題是理解:)我發現處理這
也許通過使用一個承諾? – epascarello
嗨,謝謝你的回答:) 正如我所說: 2-我知道我可以通過使用異步或承諾來實現我的目標。 所以,如果沒有承諾是不可能的,那我就沒問題了。我需要知道如果沒有其他模塊,有沒有好的方法來做到這一點。 此致敬禮。 – Damont
不直接回答你的問題,但不是直接導出某些東西,我發現導出一個函數可以方便地導出一個函數,該函數一旦被調用就會爲你創建連接,但顯式而不是懶惰。然後,您可以設置應用程序的引導部分,它將實例化連接並在準備就緒時將其提供給其他模塊。如果有兩個模塊同時調用'getChannel',它們可能都會調用'connect'(取決於你放置'started = true'開關的位置)。 – dvlsg