应用程序使用服务$ q(模块ng)。有些函数必须返回一个promise。我需要验证结果是否具有完整承诺接口。
不仅方法然后(检查Angular和有人在stackoverflow的答案中推荐):_.isFunction(myObject.then) === true
。
但Promise API的当前实现的完整接口(根据$ q ng) - 方法然后,catch,最后。 E.g:
var hasPromiseInterface = !['then','catch','finally'].some(function (methodName) {
return !_.isFunction(myObject[methodName]);
});
但是我不想对方法列表进行硬编码。我希望通过这样的稳定API来获取它们:
var promiseInterface = Object.getPrototypeOf($q.when());
var hasPromiseInterface = !_.keys(promiseInterface).some(function (element) {
return !_.isFunction(value[element]);
});
通过这种方式,我使用完整对象( promiseInterface )与每个函数实际实现。因此,它实际上不是界面。
是否有可能以某种方式获得(没有硬编码方法列表)这样的接口:
{
then: angular.noop,
catch: angular.noop,
finally: angular.noop
}
或者像这样:
{
then: jasmine.any(Function),
catch: jasmine.any(Function),
finally: jasmine.any(Function)
}
感谢提前!
P.S。它应该是容易阅读和简洁的方式:)。如果这种方式对延迟接口(解析,拒绝,通知)有用,那将会更好。