Pertanyaan Adakah cara untuk mengetahui apakah janji ES6 dipenuhi / ditolak / diselesaikan? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Saya sudah terbiasa dengan janji-janji Dojo, di mana saya bisa melakukan hal-hal berikut:

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

Adakah cara untuk menentukan apakah janji ES6 terpenuhi, terselesaikan, atau ditolak? Jika tidak, apakah ada cara untuk mengisi fungsi yang digunakan Object.defineProperty(Promise.prototype, ...)?


32
2018-01-31 16:50


asal


Jawaban:


Mereka bukan bagian dari spesifikasi atau apakah ada cara standar untuk mengaksesnya yang dapat Anda gunakan untuk mendapatkan kondisi internal janji untuk membuat polyfill. Namun, Anda dapat mengonversi janji standar apa pun menjadi salah satu yang memiliki nilai-nilai ini dengan membuat pembungkus,

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;
}

Ini tidak mempengaruhi semua janji, karena memodifikasi prototipe akan, tetapi itu memungkinkan Anda mengonversi janji menjadi janji yang mengeksposnya.


32
2018-01-31 20:55