Mogę asynchronicznie rozwiązać kilka obietnic z Promise.all(array)
. Jednak .then()
będzie działać dopiero po rozwiązaniu wszystkich tych obietnic. Jak mogę wykonywać działania, gdy obietnice zostaną rozwiązane?Wykonywanie działań zgodnie z obietnicami jest spełniane za pomocą Promise.all()
Na przykład chcę załadować wszystkie akapity z artykułu asynchronicznie za pomocą Promise.all()
- W ten sposób sieć żąda natychmiast całego ognia. Jeśli ładuję się z paragrafem 1, chcę go renderować na stronie - ale tylko jeśli zostanie zrobione ładowanie przed akapitem 2, to chcę załadować akapit 2. Jeśli zrobi się paragraf 3, a 2 to nie, chcę 3 czekać na 2 przed renderowaniem na stronę. I tak dalej.
Próbowałem coś takiego, ale nie wiem, co robić dalej:
var getStuff = function(number, time){
return new Promise(function(resolve, reject){
window.setTimeout(function(){resolve(`${number} - Done.`)}, time);
});
};
Promise.all([ getStuff(1, 200),
getStuff(2, 100),
getStuff(3, 250),
getStuff(4, 200),
getStuff(5, 300),
getStuff(6, 250),
getStuff(7, 5000)])
.then(function(data){
console.log(data);
});
Jak mogę uzyskać dziennik konsoli danych zdarzyć się jeden po drugim - bez rozstrzygania każdej obietnicy z then()
przed złożeniem kolejnego wniosku? Czy jest lepszy sposób to zrobić?
Niektóre obiecujące biblioteki mają * wywołania zwrotne * postępu. – alex
Nie można uzyskać takiego zachowania za pomocą natywnego es6? Bez dodawania kolejnej biblioteki do mojego projektu? – hackrnaut
Dlaczego nie po prostu 'getStuff (...)' i 'then' render, dla każdej obietnicy? –