I 3函数a(),b()和c()在循环中执行x次,如下所示: 我必须调用函数a (); ()完成后,我必须等待s1秒钟,然后调用函数b();经过s1秒后,我必须调用函数b(); b()完成后,我必须等待s2秒才能重新启动循环。setTimeout循环中有3个函数要在前一个完成后执行
for(var i=0; i<x; i++) {
a();
setTimeout(b,s1);
setTimeout(function() {},s2);
}
但是,上述循环函数a()和b()没有正确执行。无论先前的功能是否完成,它们都会执行。
我也试图与:
var FunctionOne = function() {
// create a deferred object
var r = $.Deferred();
// do whatever you want (e.g. ajax/animations other asyc tasks)
a();
setTimeout(function() {
// and call `resolve` on the deferred object, once you're done
r.resolve();
}, s1);
// return the deferred object
return r;
};
var FunctionTwo = function() {
b();
};
for(var i=0; i<x; i++) {
setTimeout(FunctionOne().done(FunctionTwo),s2);
}
但期望它不工作。
你能帮助我吗?
EDIT
函数a()和b()如下:
function a() {
$.ajax({
type: $('#form1').attr('method'),
url: 'Misura',
data: $('#form1').serialize(),
beforeSend: function() {
if($.trim($('#nomeMisura').val()) == "") {
alert('<%= labels.getString("nomeMisuraObbligatorio") %>');
$('#nomeMisura').val("");
return false;
}
},
success: function (data) {
$('#misura').attr('disabled', true);
$('#pulisci').attr('disabled', false);
misurazioneInCorso = true;
}
});
}
function b() {
$.ajax({
type: $('#form1').attr('method'),
url: 'Pulisci',
data: $('#form1').serialize(),
success: function (data) {
var numeroCampioniMisurazione = Number(data.delta.campione2) - Number(data.delta.campione);
//visualizzo in tabella le misurazioni
$('#tabellaMisurazioni').append('<tr id="Misurazione"><td>'+data.nomeSessione+'</td><td>'+data.nome+'</td><td>'+data.delta.campione+'</td><td>'+data.delta.campione2+'</td><td>'+numeroCampioniMisurazione+'</td><td>'+data.delta.f1+'</td><td>'+data.delta.f2+'</td><td>'+data.delta.f3+'</td><td>'+data.delta.f4+'</td><td>'+data.delta.f5+'</td><td>'+data.delta.f6+'</td><td>'+data.delta.f7+'</td><td>'+data.delta.f8+'</td><td>'+data.delta.f9+'</td><td>'+data.delta.f10+'</td><td>'+data.delta.f11+'</td><td>'+data.delta.f12+'</td><td>'+data.delta.t1+'</td><td>'+data.delta.t2+'</td><td>'+data.delta.to+'</td><td>'+data.delta.ft+'</td><td>'+data.delta.rh+'</td></tr>');
$('#tabellaMisurazioni tbody tr:first').html('<td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td><td>---</td>');
$('#misura').attr('disabled', false);
$('#pulisci').attr('disabled', true);
$('#esportaCsvMisurazioni').attr('disabled', false);
$('#nomeMisura').val('');
misurazioneInCorso = false;
}
});
}
所以,我认为a()和b()是异步函数。
可以根据需要在第二个方法什么是不工作?是'a'同步还是异步? – 2014-11-06 19:30:45