当 first() 的所有内容都存在时,如何使 promise 起作用;如果您一次向数组添加 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>
complete在“解决”所有其他 ajax 函数后触发。也就是说,即使
then在 Promise.all()中拦截的事件之后,也可能不是最优雅的方式——将 ajax 调用包装在另一个 Promise 中。