1つずつ順番に実行する必要があるタスクがいくつかあります。
function doTasks(tasks, urlDoTask) {
// Create a deferred for each task by calling doTask().
var deferreds = $(tasks).map(function (i, task) {
return doTask(task, urlDoTask);
}).toArray();
// return a composite deferred which will wait for each of the doTask requests.
return $.when.apply($, deferreds);
}
function doTask(task, urlDoTask) {
return ajax({
url: getRootDir() + urlDoTask,
data: { param: task.SomeParam },
type: 'POST',
dataType: 'json'
}).then(function (data) {
return ok(createObject("status", "ok", "op", "doTask", "task", task, "data", "passed"));
},
function (data) {
return ok(createObject("status", "fail", "op", "doTask", "task", task, "data", "failed"));
});
}
function ok() {
return newPromise("resolve", arguments);
}
function newPromise(type, args) {
return $.Deferred(function (dfd) {
dfd[type].apply(dfd, args);
}).promise();
}
function createObject() {
var ob = {};
// copy all the arguments name/value pairs into the object
for (var i = 0; i < arguments.length; i += 2) {
var n = arguments[i];
var v = arguments[i + 1];
ob[n] = v;
}
return ob;
}
このコードを変更して、各 doTask を 1 つずつ順番に実行するにはどうすればよいですか? jquery キューを使用することを考えましたが、ここで適用するにはどうすればよいですか? たぶん次のようなことをしています:
var deferreds = $(tasks).map(function (i, task) {
$({}).queue(doTask(task, urlDoTask));
}).toArray();
各タスクが完了したら、next() を実行しますか?