Có một cách để làm cho require
sync gọi. Làm cho nó CommonJS phong cách:
var module = require('modulepath')
Vì vậy, nếu bạn muốn KHÔNG cần một funciton nhà máy ở lồng nhau đòi hỏi các cuộc gọi của bạn, bạn có thể "đồng bộ hóa" các yêu cầu cuộc gọi như vậy ... Nhưng kể từ khi bạn làm bạn ra khỏi của may mắn.
Kiểu AMD requre(depsArray, factoryFn)
giống như cách đẩy mã của bạn vào một chuỗi song song. Không có cách nào để làm cho nó "đồng bộ" nhưng bạn có thể sử dụng "semaphores" để điều phối kết quả.
Câu trả lời cho câu hỏi của bạn cũng phụ thuộc rất nhiều vào những gì lồng nhau A và lồng nhau B tiêu thụ. Nếu chúng phụ thuộc vào một số sản phẩm từ trên đòi hỏi như vậy bạn hoàn toàn phải sử dụng "Cột ren" và không thể chỉ đẩy lồng nhau đòi hỏi các cuộc gọi vào tên xác định cuộc gọi:
function someFunction(callback) {
var resultOfOuterCode = someResultOfCalculations
//top level require
require([...], function(...) {
var resultOfTopRequireCode = someOtherResultOfCalculations
var semaphore = {
'count': 2 // represents the number of thread that need to be "done" before
, 'callback':callback // this callback is fired.
, 'checkIfLast': function(){
this.count -= 1
if (!this.count) {
// count is now 0 - time to run our callback
this.callback()
}
}
}
//nested require A
require([...], function(...) {
// using resultOfTopRequireCode // <-- !!!! this is important part
...
semaphore.checkIfLast()
});
//nested require B
require([...], function(...) {
// using resultOfTopRequireCode // <-- !!!! this is important part
semaphore.checkIfLast()
});
});
};
Nói cách khác, chỉ cần nghĩ về yêu cầu (dependsArray, factoryFn) như là "chủ đề" và áp dụng sự hiểu biết của bạn về việc sử dụng các chủ đề cho nó.
Bạn có nên sử dụng các phụ thuộc không? – epascarello
Có. Tuy nhiên, chúng tôi đang cố gắng tách công cụ của mình thành các tệp riêng biệt. Ví dụ, đoạn mã trên nằm trong FileA.js. FileB.js gọi someFunction() với gọi lại của nó. Tuy nhiên, gọi lại của nó có sự phụ thuộc vào một số cài đặt xảy ra trong hàm callbacks require() của FileA.js. Vấn đề là bản chất không đồng bộ của yêu cầu có nghĩa là gọi lại được thực hiện trước khi nó phụ thuộc trong require() được thiết lập. – user657352