Le promesse ES2015 non avranno mai una progressione. Le promesse rappresentano un valore finale singolare. Se vuoi più valori puoi guardare in osservabili - o mettere i progressi sulla funzione di ritorno promessa.
Mettere i progressi sulla funzione di restituzione promessa è piuttosto semplice. Fondamentalmente si prende una richiamata come parametro per la funzione e la si chiama ogni volta che si verifica una notifica di avanzamento.
Ecco alcuni testo adattato dalla nostra guida al bluebird:
progressione ha componibilità e le questioni concatenamento con le API che utilizzano promessa gestori di progressione. Mentre le altre librerie si allontanano dall'API di progressione poiché ha davvero poco a che fare con le promesse, lo stesso farà Bluebird. L'implementazione del caso di utilizzo comune delle barre di avanzamento può essere eseguita utilizzando un modello simile a IProgress in C#.
utilizzando jQuery prima:
Promise.resolve($.get(...))
.progressed(function() {
// ...
})
.then(function() {
// ...
})
.catch(function(e) {
// ...
})
utilizzando jQuery dopo:
Promise.resolve($.get(...).progress(function() {
// ...
}))
.then(function() {
// ...
})
.catch(function(e) {
// ...
})
implementazione delle interfacce generali di progresso come in C#:
function returnsPromiseWithProgress(progressHandler) {
return doFirstAction().tap(function() {
progressHandler(0.33);
}).then(doSecondAction).tap(function() {
progressHandler(0.66);
}).then(doThirdAction).tap(function() {
progressHandler(1.00);
});
}
returnsPromiseWithProgress(function(progress) {
ui.progressbar.setWidth((progress * 200) + "px"); // update with on client side
}).then(function(value) { // action complete
// entire chain is complete.
}).catch(function(e) {
// error
});
fonte
2015-10-02 14:49:14