Будь то ES6 Promise или Bluebird Promise, Q Promise и т. Д.
Как мне проверить, является ли данный объект Обещанием?
.thenхочу сказать, что любой может создать объект, который предоставляет метод, который не является Обещанием, не ведет себя как Обещание и не имеет намерения использоваться как Обещание. Проверка на .thenметод просто говорит вам , что если объект не имеет .thenметод, то вы не имеете обещание. Обратное - что существование .thenметода означает , что вы делаете есть обещание - это не всегда верно.
.thenметод. Да, это может привести к ложным срабатываниям, но это предположение, что все библиотеки обещаний полагаются (потому что это все, на что они могут положиться). Насколько я вижу, единственная альтернатива - это принять предложение Бенджамина Грюнбаума и провести его через тестовый набор обещаний. Но это не практично для реального производственного кода.
.thenметод, но это не скажет вам, что то, что у вас есть, является Обещанием окончательно. Все, что вы знаете в этот момент, - это то, что у вас есть что-то, что раскрывает.thenметод, например, Обещание.