javascript w3schools Notificaciones de progreso en ECMAScript Promise



promises javascript w3schools (1)

Las promesas de ES2015 nunca tendrán progresión. Las promesas representan un valor eventual singular. Si desea valores múltiples, puede observar los observables, o poner el progreso en la función de devolución de promesa.

Poner el progreso en la función de devolución de promesa es bastante fácil. Básicamente, toma una devolución de llamada como un parámetro a la función y la llama cuando se produce una notificación de progreso.

Aquí hay un texto adaptado de nuestra guía en bluebird :

La progresión tiene problemas de composición y encadenamiento con las API que utilizan los controladores de progresión de promesa. A medida que otras bibliotecas se alejan de la API de progresión, ya que realmente tiene poco que ver con las promesas, también lo hará Bluebird. La implementación del caso de uso común de barras de progreso se puede lograr usando un patrón similar a IProgress en C #.

Usando jQuery antes:

Promise.resolve($.get(...))
    .progressed(function() {
        // ...
    })
    .then(function() {
        // ...
    })
    .catch(function(e) {
        // ...
    })

Usando jQuery después de:

Promise.resolve($.get(...).progress(function() {
        // ...
    }))
    .then(function() {
        // ...
    })
    .catch(function(e) {
        // ...
    })

Implementando interfaces de progreso general como en 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
});

Estamos usando las ECMAScript 6 promises .

Necesitamos implementar notificaciones de progreso para el usuario final (esto es un requisito de UX puro). Sé que otros marcos de promesa (biblioteca de Q promise , por ej.) Lo permiten.

¿Cómo podemos adoptar un tipo de indicación de progreso de la manera más elegante ?

¿O deberíamos migrar a un marco diferente? (No sé cómo estimar el esfuerzo de este último)





ecmascript-6