Любой способ узнать, является ли переменная выражением углов?

Я делаю директиву, которая принимает функцию как параметр области (scope: { method:'&theFunction' }). Мне нужно знать, является ли результат, возвращаемый этим методом, обещанием angular (если да, то что-то произойдет при разрешении, иначе это произойдет сразу).

Пока я тестирую, существует ли foo.then, но мне было интересно, есть ли лучший способ сделать это.

Ответ 1

Вы можете использовать $q.when, чтобы обернуть объект в качестве обещания (независимо от того, есть оно или нет). Тогда вы можете быть уверены, что всегда имеете дело с обещанием. Это должно упростить код, который затем обрабатывает результат.

Документация для $q.when здесь с $q.

Ответ 2

Angular when() - хороший вариант, о котором говорил Дэвин.

Если это не соответствует вашим потребностям, то Angular внутренний способ проверки (он использует это внутри when) очень близко к тому, что вы делаете:

var ref = function(value) {
   if (value && isFunction(value.then)) {
      // Then this is promise
   }

Ответ 3

@kayakDave, спасибо за руководство в нужном месте.

angular $q

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