最初の呼び出しの結果を次の呼び出しに渡す、連続した ajax 呼び出しを行う単純なアプリケーションに取り組んでいました。
もちろん、コールバック地獄には行きたくないので、Promises/A+仕様の例とQ ライブラリを調べます。
必要な結果になるはずの非同期関数を用意しました。しかし、Sequential promise の受け渡しを単純化する方法についての洞察が必要です。
今のところ、promise と deferred オブジェクトを最適に操作する方法についてまだ読んでいます。非常に素朴なコードを許してください。
だから今、私は2つのことを見ています:
- promise の順序付けを単純化する方法 (私の場合のように互いに依存しています)
提案
var modifyableObject = { toProcess : ["one", "two", "three", "four", "five"] } function returnsDeferredResults(someResult) { var deferred = Q.defer(); // my async function (setTimeout for now will do, $.ajax() later) setTimeout(function () { var nextResult = (someResult || " Initial_Blank_Value ") + "..." + modifyableObject.toProcess[0]; modifyableObject.toProcess = modifyableObject.toProcess.splice(1); console.log("New Tick Result: ", nextResult, "Array: ", modifyableObject.toProcess); deferred.resolve( nextResult); }, 200); return deferred.promise; } //$("#test_promise").click(function () { function getDeferredResult(prevResult) { return returnsDeferredResults(prevResult); } var prevResult = getDeferredResult(); var nextTick = ""; for (var i = modifyableObject.toProcess.length; i > 1; i --) { if (nextTick) nextTick = nextTick.then(getDeferredResult); else nextTick = prevResult.then(getDeferredResult); } //nextTick.fin(function(){ ...}); //}); /* New Tick Result: Initial_Blank_Value ...one Array: ["two", "three", "four", "five"] New Tick Result: Initial_Blank_Value ...one...two Array: ["three", "four", "five"] New Tick Result: Initial_Blank_Value ...one...two...three Array: ["four", "five"] New Tick Result: Initial_Blank_Value ...one...two...three...four Array: ["five"] New Tick Result: Initial_Blank_Value ...one...two...three...four...five Array: [] */
よろしくお願いします!