を呼び出した後、関数を実行するより良い方法がありますか?Backbone.jsを使用しています。クライアントWebサービスにajaxポストを送信する必要があるアプリケーションがあります。Javascript:x量の非同期データベース/ ajaxが
ただし、投稿するコンテンツは動的であり、特定の配列によって決定されます。
アレイ内の各アイテムについて、データを取得する必要があります。
集約オブジェクトを送信する必要があるデータを組み立てた後。
現在のところ、私は同期アプローチがありますが、これは最良の方法ではないと感じています。
var arrParams = [{id: 1, processed: false},{id: 7, processed: false},{id: 4, processed: false}];
function callback(data) {
$.post()... // jquery ajax to post the data... }
function fetchData(arr, data, callback) {
var currentId = _(arr).find(function(p){ return p.processed === false; }).id; // getting the ID of the first param that has processed on false...
// ajax call fetching the results for that parameter.
$.ajax({
url: 'http://mysuperwebservice.com',
type: 'GET',
dataType: 'json',
data: {id: currentId},
success: function(serviceData) {
data[currentId] = serviceData; // insert it into the data
_(arr).find(function(p){ return p.id === currentId; }).processed = true; // set this param in the array to 'being processed'.
// if more params not processed, call this function again, else continue to callback
if(_(arr).any(function(p){ return p.processed === false }))
{
fetchData(arr, data, callback);
}
else
{
callback(data);
}
},
error: function(){ /* not important fr now, ... */ }
});
}
fetchData(arrParams, {}, callback);
これらの呼び出しを非同期で起動し、すべての結果が含まれている場合にのみコールバックを実行する方法はありませんか?
WAWを...私はこれについて知らなかった...それいいです! – fguillen
はいdeferredsはいいです) –
あまりにもajaxなしで動作しますか?私はあなたがローカルデータベースに行く状況を見ることができます。そこでは、関数が別々のデータベース呼び出しを待つべき状況にありますか? 私はそれが本当に複数のajax呼び出しを待つ良い方法だと言っていますが。 – Sander