Sto ancora imparando JavaScript Promise
s, e mi sono imbattuto in un comportamento che non capisco.Promessa JavaScript quindi() che ordina
var o = $("#output");
var w = function(s) {
o.append(s + "<br />");
}
var p = Promise.resolve().then(function() {
w(0);
}).then(function() {
w(1);
});
p.then(function() {
w(2);
return new Promise(function(r) {
w(3);
r();
}).then(function() {
w(4);
});
}).then(function() {
w(5);
});
p.then(function() {
w(6);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>
mi aspetterei queste istruzioni da eseguire in ordine - cioè, il che la produzione sarebbe
0
1
2
3
4
5
6
Invece, l'uscita è
0
1
2
3
6
4
5
Anche la rimozione dell'interno di Promise
dà s, quello che mi sembra di essere, contraddire i risultati. 1
viene emesso prima di 2
, ma 6
viene emesso prima di 5
.
Qualcuno può spiegarmi questo?
Qualcosa che ho notato è che la riassegnazione di p
ogni volta ci dà l'ordine che mi aspetterei.
Perché ti aspetti quell'ordine? L'ordine in cui scrivi il codice non è necessariamente l'ordine in cui le promesse si risolvono; solo "allora" ha il controllo su questo. – elclanrs
Perché mi aspetto che 'then()' s accada in ordine. – dfoverdx
Sì, il 'then' s di ** ogni ** catena di promesse. – elclanrs