Я только сканирую в JS, поэтому, вероятно, решение очевидно.Выполнение кода после вызова динамического числа функций
Я пишу расширение Chrome, которое в действии браузера (после нажатия кнопки расширения) считывает несколько страниц и с каждого из них извлекает целое число. Затем он создает таблицу с этими целыми числами. Я делаю это с AJAX, поэтому он асинхронен, и перед созданием таблицы я хочу иметь все целые числа.
Я прочитал эти темы:
- Pass in an array of Deferreds to $.when()
- How to tell when multiple functions have completed with jQuery deferred
... и написал код, который не работает.
var sum = 0;
document.addEventListener('DOMContentLoaded', function() {
var deferreds = [];
var users = [...], pages = [...];
for(i = 0; i < users.length; ++i) {
for(j = 0; j < pages.length; ++j)
deferreds.push(window[pages[j]](users[i], pages[j]));
}
$.when.apply(null, deferreds).done(function() {
alert("sum: " + sum);
});
});
function Name(user, page) {
$.get("http://page2/" + user, function(data) {
sum += 7;
});
return 7;
}
function Name2(user, page) {
$.get("http://page/" + user, function(data) {
sum += 84;
});
return 84;
}
Так что бдительные печатает 0 вместо 91. Я вырезал часть со столом, как все поля являются «неопределенными» в любом случае. Если я получу сумму = 91, я, вероятно, получу таблицу.