Ответ 1
Нет, нет. Обсуждалось , но спецификация минимальна. Он не включает в себя множество других функций. Он предназначен для взаимодействия с библиотекой promises и обеспечения простой функциональности.
Вот правильный polyfill этого предложения, первоначально сделанный StefPanner.
Кроме того, я не согласен с <удачным > текущим теперь удаленным ответом, добавляя его сами, потому что все они делают это неправильно (как перечислимое свойство - не весело). Даже если мы проигнорируем, что он делает с возвращаемыми значениями и состоянием ошибки возвращенного обещания. Предполагаемый способ расширения native promises заключается в их подклассификации, к сожалению, ни один браузер не поддерживает это, поэтому нам придется подождать.
Вместо того, чтобы возиться с собственными прототипами, мы должны использовать другой шаблон:
openDb().then(foo).then(bar).finally(close).then(more);
Является восприимчивым к нам, забывая позвонить близко, даже если мы откроем его 100 раз в нашем приложении, забыв закрыть его, даже когда-то все равно может быть разрушительным. С другой стороны, мы можем использовать шаблон удаления, который некоторые библиотеки обещаний предоставляют в себе:
openDb(function(db){
return foo(db).then(bar);// chain here
}).then(more);
В принципе - этот шаблон означает вместо того, чтобы openDB
вернуть обещание - мы получаем функцию и возвращаем обещание, когда функция запускается, если она возвращает обещание, которое мы ожидаем, чтобы это обещание разрешилось. Это выглядит примерно так:
function openDb(withDb){
return justOpenWithoutCleanUp().
then(withDb).
then(clean, function(e){ clean(); throw e; }); // note the rethrow
}