Ответ 1
Они не являются частью спецификации и не имеют стандартного способа доступа к ним, которые вы могли бы использовать, чтобы получить внутреннее состояние обещания для построения polyfill. Тем не менее, вы можете преобразовать любое стандартное обещание в одно, у которого есть эти значения, создав обертку,
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;
}
Это не влияет на все promises, поскольку модификация прототипа будет, но это позволяет вам преобразовать обещание в обещание, которое предоставляет его состояние.