Как сделать, что бы обещание срабатывало при выполнении всего содержимого first(); Если добавить в массив сразу AJAX запрос, то всё работает как требуется. Но если first(), то ответа от AJAX не дожидается, что и логично.
const arr = [];
function first (i) {
$.ajax({
url: `http://jsonplaceholder.typicode.com/users/${i}`,
type: 'POST',
data: {
i: i
},
complete: function() {
console.log('AJAX №' + i);
}
})
};
for (let i = 1; i < 6; i++) {
arr.push(
first(i)
);
}
Promise.all(arr)
.then(resolve => {
console.log('После AJAX');
})
.catch(reject => {
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
function first (i) {
return $.ajax({ ...
complete
срабатывает после "отработки" всех остальных функций ajax.
Т.е и после события, которое перехватывает then
в Promise.all()
Может быть не самый элегантный способ - обернуть вызов ajax в еще один Promise.
const arr = [];
function first (i) {
return new Promise(function(resolve, reject) {
$.ajax({
url: `http://jsonplaceholder.typicode.com/users/${i}`,
type: 'GET',
data: {
i: i
},
complete: function(data) {
console.log('AJAX №' + i);
resolve(data);
},
error: function(err) {
console.log(err);
reject(err);
}
});
});
};
for (let i = 1; i < 6; i++) {
arr.push(
first(i)
);
}
Promise.all(arr)
.then(resolve => {
console.log('После AJAX');
})
.catch(reject => {
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть массив объектов, как проверить есть ли в объектах пустые значения? Массив такого вида:
У меня есть страница И я не могу понять как сделать так чтобы когда ПРАВИЛЬНЫЙ логин и пароль,переходил на другую страницуА когда не правильный...
К примеру существует массив с числами