Pregunta ¿Hay alguna forma de saber si se cumple / rechaza / resuelve una promesa de ES6? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Estoy acostumbrado a las promesas de Dojo, donde puedo hacer lo siguiente:

promise.isFulfilled();
promise.isResolved();
promise.isRejected();

¿Hay alguna forma de determinar si una promesa de ES6 se cumple, se resuelve o se rechaza? Si no, ¿hay alguna manera de completar esa funcionalidad usando Object.defineProperty(Promise.prototype, ...)?


32
2018-01-31 16:50


origen


Respuestas:


No forman parte de la especificación ni existe una forma estándar de acceder a ellos que pueda utilizar para obtener el estado interno de la promesa de construir un relleno policridable. Sin embargo, puede convertir cualquier promesa estándar en una que tenga estos valores creando un contenedor,

function MakeQuerablePromise(promise) {
    // Don't create a wrapper for promises that can already be queried.
    if (promise.isResolved) return promise;

    var isResolved = false;
    var isRejected = false;

    // Observe the promise, saving the fulfillment in a closure scope.
    var result = promise.then(
       function(v) { isResolved = true; return v; }, 
       function(e) { isRejected = true; throw e; });
    result.isFulfilled = function() { return isResolved || isRejected; };
    result.isResolved = function() { return isResolved; }
    result.isRejected = function() { return isRejected; }
    return result;
}

Esto no afecta a todas las promesas, ya que la modificación del prototipo sí lo haría, pero sí le permite convertir una promesa en una promesa que expone su estado.


32
2018-01-31 20:55