Я хотел бы выполнить серию запросов get, а затем выполнить некоторые действия после завершения всех запросов get. Ниже приведена начальная точка кода, который у меня есть, но поскольку запрос get является асинхронным, сразу же выполняется «выполнить некоторые действия после завершения всех запросов getJSON».
Как правильно / лучше всего это делать?
...
$.each(array, function(i, element) {
// setup url and params
$.getJSON(url, params, function(data) {
// do work on data
}
}
// do some action after all getJSON requests finish
...
Я подумал о том, чтобы иметь счетчик для числа элементов в массиве, уменьшить его и выполнить действие, когда оно достигнет нуля, но меня беспокоит, что операция не является атомарной и может привести к ошибкам. Ниже приведен пример того, о чем я думал, но я не уверен, что он всегда будет работать правильно.
...
$.each(array, function(i, element) {
var items_remaining = array.length;
// setup url and params
$.getJSON(url, params, function(data) {
// do work on data
items_remaining = items_remaining - 1;
if ( items_remaining === 0 ) {
// do some action after all getJSON requests finish
}
}
}
....