Я построил демоверсию, которая рандомизирует обещания. Он создает массив обещаний, которые разрешат от 1 до 100. Затем перетасуйте этот массив и получите результаты. Он работает, и мы можем видеть его выходы в случайном порядке. (fiddle)Рандомизировать обещания, которые используют ajax
var promises = [];
for (var i = 0; i < 100; i++) {
promises.push(new Promise(function(resolve, reject) {
resolve(i);
}));
}
// http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
function shuffle(array) {
var currentIndex = array.length,
temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
shuffle(promises).forEach(function(r) {
r.then(function(v) {
\t $('#out').append('<div>'+v+'</div>')
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="out">
</div>
Однако, когда я включаю Аякс в обещании, то результат уже не случайный. Результат иногда не в порядке, но в основном в порядке возрастания. Часть, которая отличается от предыдущей демонстрации, заключается в создании массива обещаний. fiddle
var promises = [];
for (var i = 0; i < 100; i++) {
promises.push(new Promise(function(resolve, reject) {
$.ajax({
url: '/echo/json/',
data: { json: JSON.stringify({"v": i}) },
method: 'POST',
success: function(rs) {
resolve(rs.v);
}
});
}));
}
Почему?
иметь смысл. Спасибо за объяснение. – Fabricator