アロハ。これは、何十年にもわたって潜んでいた後の私の最初の質問です。この質問の冗長で直接的な形式、および受け入れ可能な回答の制限についてお詫び申し上げますが、私は貢献するためにここにいます。他の質問(たとえば、Node.jsでの非同期関数の長いネストやJavascriptでの連鎖コールバックの可読性を回避する方法)では、満足のいく答えが得られないという問題があります。
いくつかのJavascriptコールバックを実行して、4つのアクションのシーケンスが次々に発生するようにします。ソースは次のとおりです。
var self = this;
fade(div, fadeIn, -20, function() {
load(unload, dataOut, -10, function() {
load(self, dataIn, 10, function() {
fade(div, fadeOut, 20),0);
unload = self;}
);}
);}
);
load()関数とfade()関数は、内部のセマンティックの詳細を除いて非常に似ており、次のようになります。
function load(menuCategory, data, step, callback) {
menuCategory.parentNode.style.width = data+"px";
data += step;
if(dataIn <= data && data <= dataOut) {
setTimeout(function() { load(menuCategory,data,step,callback) }, 15);
} else if(callback && (typeof(callback) == 'function')) {
callback();}
}
この混乱に関連するいくつかの質問がありますが、最初に私が探していない答えをあなたに与えましょう。jQueryを使用した回答は受け入れられません。他のタイミングまたは「シンクロニシティ」フレームワークまたはモジュールを使用した回答は受け入れられません。実行をブロックする理由を質問する回答は受け入れられません。Javascript以外の言語を使用した回答は受け入れられません。抽象的でない回答も受け入れられますが、最終的な解決策は可能な限り抽象的である必要があります。つまり、回答は、類似しているがわずかに異なるさまざまなアクションに対応できる必要があります。
これが私の主な質問です:ここで起こっているコールバック地獄を減らすために、これらのアクションを順番に適用するために使用できる関数/オブジェクトはありますか?言い換えると、オブジェクト/関数が個別に繰り返される(つまり渡される)ときに、オブジェクト/関数が各アクションを同期的に実行できた場合、オブジェクトはどのようになりますか?
二次的な質問:このコールバックビジネスが他の言語でgoto()にどれほど似ているか知っている人はいますか?つまり、このコールバックのネストは、私にとって非常に厄介でエレガントではないと感じます。このクレイジーなビジネスを減らすために開発中またはすでに開発中のJavascript言語構造はありますか?コールバックのネストは、従うのが最も難しいロジックフローの一部です。ぎこちなく感じます。
ここでの私の目標は、タイトでエレガント、魅力的な、自家製のJavascriptオブジェクト/関数(for()ループまたは同等のものを呼び出すことができます)で、これらの操作を各アクションに順番に適用することです。これまでお読みいただき、誠にありがとうございました。:)