我正在制作一个将函数作为范围参数(scope: { method:'&theFunction' }
)的指令。我需要知道该方法返回的结果是否是一个有角度的承诺(如果有的话会在分辨率上发生,否则会立即发生)。
目前我正在测试foo.then
是否存在,但我想知道是否有更好的方法。
答案 0 :(得分:82)
您可以使用$q.when
将对象包装为承诺(无论是否)。然后,你可以确定你总是在处理一个承诺。这应该简化代码,然后处理结果。
$q.when
的文档为here with $q。
答案 1 :(得分:78)
当Davin提到时,Angular的when()
是一个不错的选择。
如果这不符合您的需求,那么Angular的internal way of checking(它在when
内使用它)与您正在做的非常接近:
var ref = function(value) {
if (value && isFunction(value.then)) {
// Then this is promise
}
答案 2 :(得分:5)
@kayakDave,感谢您指导正确的地方。
when(value, [successCallback], [errorCallback], [progressCallback]); Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. This is useful when you are dealing with an object that might or might not be a promise, or if the promise comes from a source that can't be trusted.
$q.when(value).then(function (data) {
//this helps me to bind data from $resource or $http or object
}
检查此fiddle
答案 3 :(得分:0)
对于大多数用例来说,$q.when()
的答案似乎是最好的答案,我为我使用了 instanceof 。
if(buttonData instanceof $q) {
buttonData.then(function(actions) {
$scope.buttonActions = actions;
});
} else {
$scope.button = buttonData;
}
或者,以下 IF 也可以,但是我最终还是采用了上述解决方案。
if(Object.getPrototypeOf(buttonData) === $q.prototype) {