Сообщение от Malleys
|
function Success(v) { return Promise.resolve(v); }
function Failure(v) { return Promise.reject (v); }
function Try(fn) {
return new Promise(r => r(fn()))
.then(Success)
.catch(Failure);
}
|
это вроде бы можно сократить до
function Try(fn) {
return new Promise(r => r(fn()));
}
Сообщение от Malleys
|
Возможно ли получить мгновенное значение промиса p? Если написать `p.then(console.log);`, а промис ещё не выполнился, то мы ничего не получим. Возможно ли мгновенно узнать состояние промиса?
|
в общем случае нельзя.
если это наш промис (созданный через new Promise(...)), то в его функцию можно дописать изменение какого-то внешнего флажка, и смотреть этот флажок. А иначе никак - даже если промис уже зарезолвлен, функция в then пойдет следующим микротаском, т.е. синхронно не определить. Можно только асинхронно выяснить, что на момент начала проверки промис "уже был зарезолвлен"
Сообщение от Malleys
|
Возможно ли, чтобы промис разрешился другим промисом?
|
зареджектиться можно, зарезолвиться нельзя, будет вызван его метод then для получения результата. Причем это не только для промиса, а вообще для любого thenable