Если для запроса используется jQuery - он уже поддерживает собственную реализацию промайзов.
function fart(amount, doAfter) {
var requests = [];
for (var i = 0; i < amount; i++) {
var request = $.post("fart.php", function(response) {
console.log(response);
});
requests.push(request);
}
$.when(requests).done(doAfter)
}
fart(20, function() {
alert("Фух... кончилось");
})
@
ksa - а зачем? Асинхронность ж никуда не уходит.