require
コール同期を行うための方法があります。あなたはませあなたの必要とネストされた通話の工場のfuncitonを必要とする場合
var module = require('modulepath')
そう、あなたが「同期」インクルードが呼び出す方法を必要とする可能性がある...しかし、あなたが行うので、あなたはアウトです:作るそれがスタイルCommonJS運の
AMDスタイルrequre(depsArray, factoryFn)
は、コードを並列スレッドにプッシュするのとまったく同じです。それを "同期"させる方法はありませんが、セマフォを使用して結果を調整することができます。
ネストされたAとネストされたBが消費するものにも大きく依存します。ちょうど必要(dependsArray、factoryFnを考える、つまり
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()
});
});
};
:彼らはトップからいくつかの製品に依存している場合ので、あなたは絶対に「ネジ付きセマフォ」を使用しなければならないとだけ定義という名前の呼び出しに必要とネストされた呼び出しをプッシュすることはできませんように必要)を「スレッド」として定義し、スレッドの使用方法を理解するために使用します。
依存関係を使用しないでください。 – epascarello
はい。しかし私たちは私たちのものを別々のファイルに分けようとしています。たとえば、上のコードはFileA.jsにあります。 FileB.jsはそのコールバックでsomeFunction()を呼び出します。ただし、コールバックはFileA.jsのrequire()コールバックで発生するいくつかの設定に依存しています。問題は、requireの非同期性は、require()の依存関係が設定される前にコールバックが実行されることを意味します。 – user657352