Любой способ узнать, является ли переменная обещанием angularjs?
Я делаю директиву, которая принимает функцию в качестве параметра области (scope: { method:'&theFunction' }
). Мне нужно знать, является ли результат, возвращаемый этим методом, угловым обещанием (если да, то что-то произойдет на разрешении, иначе это произойдет сразу).
сейчас я тестирую, если foo.then
существует, но мне было интересно, есть ли лучший способ сделать это.
4 ответа:
можно использовать
$q.when
чтобы обернуть объект как обещание (будь то или нет). Тогда вы можете быть уверены, что вы всегда имеете дело с обещанием. Это должно упростить код, который обрабатывает результат.документация
$q.when
и здесь с $q.
Угловое по
when()
это хороший вариант, как Давин говорил.Если это не соответствует вашим потребностям, то угловой внутренний способ проверки (он использует это внутри
when
) очень близко к тому, что вы делаете:var ref = function(value) { if (value && isFunction(value.then)) { // Then this is promise }
@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 }
проверить это скрипка
The
$q.when()
ответ кажется лучшим ответом для большинства случаев использования, я использовал instanceof на шахте.if(buttonData instanceof $q) { buttonData.then(function(actions) { $scope.buttonActions = actions; }); } else { $scope.button = buttonData; }
кроме того, после если работал также, но я в конечном итоге иду с вышеуказанным решением.
if(Object.getPrototypeOf(buttonData) === $q.prototype) {