Любой способ узнать, является ли переменная выражением углов?
Я делаю директиву, которая принимает функцию как параметр области (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