$ q.defer vs new promise(function(resolve,reject))

时间:2017-08-03 10:07:11

标签: angularjs promise

我有这个HTML:

<div class="documentation-comment-view h100" ng-if="views.comment.selected">
    <div ng-include="views.comment.templateUrl" class="h100"></div>
</div>

<div class="documentation-annotation-view h100" ng-if="views.annotation.selected">
    <div ng-include="views.annotation.templateUrl" class="h100"></div>
</div>

<div class="documentation-localisation-view h100" ng-if="views.localization.selected">
    <div ng-include="views.localization.templateUrl" class="h100"></div>
</div>

html内容根据变量的值而变化。

这是负责它的代码的一部分:

            myService.myFunction(param).then(function (retData) {

                //Do something here...

                changeView(scope.views.comment);
            });

我的问题在于承诺和这两个函数,我们假设这样做:

功能1:

    function myFunction(param) {
        var deferred = $q.defer();

        //Do something...
        deferred.resolve(retData);

        return deferred.promise;
    }

功能2:

    function myFunction(param) {
        return new Promise(function (resolve, reject) {

            //Do something...

            resolve(retData);

        });
    }

使用这两种功能中的任何一种都不会出现任何错误,并且两者都达到了changeView。但由于任何原因,使用函数2不会更改视图。它仅使用函数1。

任何帮助找到发生这种情况的原因?感谢。

1 个答案:

答案 0 :(得分:1)

<强>无极

这是一个纯粹的Javascript函数,它没有告诉任务完成的角度。它是一种在不使用角度时使用异步调用的方法。 有关其工作原理的更多详情see this

$ q

基于角度的服务,可帮助您异步运行函数,并在完成处理时使用它们的返回值(或异常),并告诉角度再次对元素进行消化并应用更改。 有关详情see this