当前位置: 首页 > 面试题库 >

如何在Angular中使用Bluebird?

狄宾实
2023-03-14
问题内容

我尝试将Angular与Bluebird Promise一起使用:

HTML:

<body ng-app="HelloApp">
    <div ng-controller="HomeController">{{name}} {{also}}</div>
</body>

JS:

// javascript
var app = angular.module('HelloApp', []);

app.controller("HomeController", function ($scope) {
    var p = Promise.delay(1000).then(function () {
        $scope.name = "Bluebird!";
        console.log("Here!", $scope.name);
    }).then(function () {
        $scope.also = "Promises";
    });
    $scope.name = "$q";
    $scope.also = "promises";
});

window.app = app;

[ 小提琴 ]

但是,无论我尝试了什么,它都保持不变"$q promises"并且没有更新。除非我添加了手册$scope.$apply,否则我会避免使用。

如何让Bluebird与AngularJS一起使用?

(我知道这是可能的,因为$ q可以这样做)

我正在使用Bluebird2.0,我在这里。


问题答案:

这是可能的,甚至很容易!

好吧,如果我们看看Angular自己的诺言,我们需要将Bluebird带到$evalAsync某个地方才能获得完全相同的行为。

如果这样做,那么两个实现都符合Promises /A+的事实意味着我们可以在$q代码和Bluebird代码之间进行互操作,这意味着我们可以在Angular代码中自由使用Bluebird的所有功能

蓝鸟通过以下功能公开了此Promise.setScheduler功能:

// after this, all promises will cause digests like $q promises.
function trackDigests(app) {
    app.run(["$rootScope",function ($rootScope) {
        Promise.setScheduler(function (cb) {
            $rootScope.$evalAsync(cb);
        });
    }]);
}

现在我们要做的就是添加一个:

trackDigests(app);

一行接var app =...一行,一切都会按预期进行。为了获得奖励积分,请将Bluebird放入服务中,以便您可以注入它,而不是在全局名称空间上使用它。

这是一个说明这种行为的 小提琴

请注意,除了Bluebird拥有的所有功能之外$q,更重要的功能之一是Bluebird 不会
运行$exceptionHandler,而是会自动跟踪未处理的拒绝,因此您可以throw自由使用Bluebird的诺言,Bluebird会解决它们。而且调用Promise.longStackTraces()可以帮助调试很多东西。



 类似资料:
  • 问题内容: 基础 角1.1.5- http ://plnkr.co/edit/eoKt8o4MJw9sWdYdeG3s? p= preview-作品 上调 角度1.2.6- http ://plnkr.co/edit/WopgAtFNVm1mKf5Li99h? p= preview-失败 我认为我确实遵循了文档中的说明-http: //docs.angularjs.org/api/ngAnimat

  • 问题内容: 我已经能够让控制器将$ on侦听器与一起使用。 但我看不到任何有关如何获取服务以监听事件的文档。 我试过了,但是只允许一个听众。我希望多个服务中的侦听器,无论其父控制器是否在作用域内。 问题答案: 经过一番试验后,事实证明,使用最少的代码即可将事件发送到服务。 如果有其他人遇到此问题,请遵循示例服务代码。 该样本在获得相应广播后将服务模型保存并还原到本地存储中

  • 问题内容: 我有一个利用SignalR与桌面应用程序通信的应用程序。要使用SignalR,我需要在.ts文件中使用jQuery。但是,从Angular 7迁移到Angular 8后,它似乎不起作用。 我像以前的Angular版本一样使用。不幸的是,$现在向控制台输出空白。 那么,Angular v8不再支持这种方式使用jQuery,还是在迁移过程中出现其他问题? 更新: 我有通过npm加载的jQu

  • 我试图从角度服务方法查询OrientDB。但获取身份验证是一个相关错误。根据我目前的理解,我需要两个GET请求才能成功查询OrientDB。 身份验证调用。即请求 时出现错误。谁能给我一个参考实现或者指出我的代码有什么问题吗? 注意: 全局变量包含一个格式如下的JSON对象。

  • 问题内容: 如何在以后要在另一个控制器中访问的控制器中存储变量?例如: 我该怎么做? 问题答案: 在根范围内设置的变量可通过原型继承供控制器范围使用。 这是@Nitish演示的修改后的版本,它更加清楚地显示了这种关系:http : //jsfiddle.net/TmPk5/6/ 注意,在模块初始化时设置了rootScope的变量,然后每个继承的作用域都有自己的副本,可以独立设置(该函数)。另外,r

  • 如何初始化新映射 我有一个地图名Map1和另一个地图名Map2新地图