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