Если у нас есть обещание, подобное следующему, каковы ответы на вопросы в его комментариях?
p.then(function ok () {
// Can we get err() to trigger from inside here?
}, function err () {
// Can we get ok() to trigger from inside here?
});
Я знаю, что можно присоединить новый then
, который может ждать результатов или отменить результаты p
, но мне интересно, предполагая, что p
является константой, могут ли условия также рекурсивно вызывать друг друга (и без назначения функций для переменные и вызов их по имени)...
ОБНОВЛЕНИЕ
Мой вариант использования выглядит следующим образом.
В IndexedDB при открытии базы данных вы можете прослушивать следующее:
db.onsuccess = ...
db.onerror = ...
db.onblocked = ...
db.js, библиотека, которую я расширяю, чтобы удовлетворить свои потребности, добавляет эти события с обещанием API, так что успех разрешает обещание, а ошибки или блокировка отклоняют его.
Обычным вариантом использования для прослушивания блокировки будет закрытие соединения с базой данных, которое вызывает блокировку, после чего IndexedDB автоматически вызовет onsuccess
. Проблема в том, что если мы рассматриваем onblocked
как отклонение, у него, по-видимому, нет возможности повторно запустить условие разрешения (т. е. onsuccess
). Чтобы обойти это, я могу вместо этого предоставить блокировку в качестве обратного вызова, но мне было интересно, есть ли способ сделать это исключительно с использованием подхода Promises, поскольку технически ошибка больше не будет ошибкой и хотелось бы чтобы дать возможность исходному обратному вызову разрешения возобновиться с его обработкой успеха.