フラグを使用しないでください!それらは完全に不要です。
はまたA()
またはB()
に特別なことをしません。あなたが通常任務を実行するのと同じように書くだけです。
動的に更新されるプロミスチェーンの形式でキューを実装するだけです。次のように
var q_ = Promise.resolve();
function queue(fn) {
q_ = q_.then(fn);
return q_;
}
今、あなたは、A
とB
、または他の関数をキューに入れることができます。
queue(A);
queue(B);
queue(someOtherFunction);
それとも、あなたはパラメータ渡す必要がある場合:ボーナスとして
queue(A.bind(null, 'a', 'b', 'c'));
queue(B.bind(null, 'x', 'y', 'z'));
queue(someOtherFunction.bind(null, 1, 2, 3));
を、
A()
とB()
(およびその他の関数)は、そのまま(unqueued)呼び出すことができます。
queue()
に渡される関数が同期型であるか非同期型であるかを心配する必要はありません。いずれかと一緒に動作します。
DEMO
あなたはAが終了する前にBが実行を開始することを考えさせる何?あなたの環境は何ですか?あなたは次のようなものを読んでみたいです:http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded –
はAとBの同期または非同期ですか?両者が同期している場合、何もする必要はありません.Aは終了するまでBの実行を停止します。 –
AとBの両方が非同期です。 –