Этот код ломает внутри библиотеку, потому что defer.reject не вызывается в контексте defer.
Дело в том, что vow использует внутри себя свои особенности, например проброс контекста вызова коллбэков, но он не приводит промисы к своим инстансам. (cast). Cast работает неправильно из за неправильного метода isPromise который вобщем-то на самом деле isThenable.
Также очень странно работает из-за этого when
myMethod1: function () {
return vow.when(someExtenralPromiseApi(), function () {
// это не будет работать, потому что промис не был приведен к vow.Promise, this тут вероятнее всего будет undefined
return this.method2();
}, this);
},
method2: function () {}
Есть два лаконичных способа починить это, самый честный - это наверное починить isPromise чтобы он делал instanceof vow.Promise, или же сделать такую проверку в cast, но в любом случае пофейлятся тесты.
Привет!
У нас есть библиотека, API которой возвращает Bluebird промисы.
Странность была обнаружена в таком кейсе:
Этот код ломает внутри библиотеку, потому что
defer.reject
не вызывается в контекстеdefer
.Дело в том, что
vow
использует внутри себя свои особенности, например проброс контекста вызова коллбэков, но он не приводит промисы к своим инстансам. (cast). Cast работает неправильно из за неправильного методаisPromise
который вобщем-то на самом делеisThenable
.Также очень странно работает из-за этого
when
Есть два лаконичных способа починить это, самый честный - это наверное починить isPromise чтобы он делал
instanceof vow.Promise
, или же сделать такую проверку вcast
, но в любом случае пофейлятся тесты.Мне кажется, второй способ менее разрушителен.
Есть идеи?