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

有没有捷径可以代理/解析/拒绝对Angular $ q的承诺?

柴凌
2023-03-14
问题内容

给定一个未解决的deferred(dfd),然后是一个可能的promise(promise),可能会也可能不会将其推迟,是否有办法将promise委托给推迟的?

语义应为:

promise.then(dfd.resolve, dfd.reject);

$
q文档
仅提及对被拒绝的承诺的处理(而且,仅以某种方式被拒绝的承诺):

defered.resolve(value)–使用值解析派生的promise。如果该值是通过$ q.reject构建的拒绝,则将拒绝该promise。

这使得不清楚是否dfd.resolve(promise)有效/受支持。另外,我无法使用$q.when(确实需要一个then-
able),因为已延迟的承诺已被返回。

Angular版本为1.2.x。


问题答案:

是的,请deferred.resolve保证。

deferred.resolve(值)

用未决的承诺调用solve会导致承诺等待已通过的承诺,以其实现价值实现,或因其拒绝原因而被拒绝(或者,如果已通过的承诺确实如此,则永远保持待处理状态)。

用已拒绝的承诺来调用resolve会导致因已通过的承诺被拒绝的原因而被拒绝。

用已实现的承诺来调用决心会使承诺以传递的承诺的实现价值来实现。

用非承诺值调用resolve会导致使用该值履行诺言。

从Q API参考

要回答问题的另一部分:

“”这使得不清楚dfd.resolve(promise)是否有效/受支持。另外,我不能使用$ q.when(它确实需要一个then-
able),因为延迟的诺言已经返回。

所创建的承诺deferred.promise可以给予多个接收者。每个收件人都可以.then根据该诺言调用该方法。承诺只能被解决一次(值或错误)。但是,不止一个消费者可以读取该容器。

想想一个承诺,作为一个值,你可以得到一个容器 在未来
.then.catch.finally方法。您可以多次访问该容器,但是在解析时其内容是不变的。

服务中.success.error方法的弃用$http

AngularJS团队以他们新发现的智慧决定弃用.successand .error方法。这些方法是越野车,我说 很好

有关弃用的详细信息(或者我应该说失败).success.error方法参观最新的AngularJS $
HTTP服务API文档。

我们应该避免.success.error方法,并学会使用.then.catch以及.finally从现在开始。

$qOP引用的服务参考已过时。要获取最新版本,请访问AngularJS $
q服务API文档。

旧版AngularJS v1.2的更新

我在AngularJS
Github中进行了一些探索。遗留$http服务创建$q承诺(L750),随后附加越野车.success方法(L769)和越野车.error方法(L776)。

这意味着,人们坚持用AngularJS的老版本可以开始迁移到.then.catch.finally方法。

一个具有两个$http承诺的消费者的例子。

//Producer
var httpPromise = $http.get(url);

//Consumer #1
httpPromise.then (function (response) {
                vm1.data = response.data;
        }) .catch (function (err) {
                //check for error
        });

//Consumer #2
httpPromise.then (function (response) {
                vm2.data = response.data;
        }) .catch (function (err) {
                //check for error
        });

请注意,该.then方法返回的数据不同于该.success方法。

同样,两个消费者都应检查错误。

因此,即使是使用旧版AngularJS的用户也可以开始编写.success.error免费代码。



 类似资料:
  • 在这个答案中,我编写了C 17代码: 这收到了一些关于C型联想性质的负面评论,我很遗憾地说,我同意:( <代码>衰减\t 数字元素的零初始化类型 是否可以保持与数字元素类型的关联,但不能键入30个字符来获取它? 编辑: 我有很多关于或从中提取类型的包装器的答案。问题是它们需要阅读器导航到辅助位置以读取不亚于初始化代码 仍然只是对数字元素的引用。因此,最终,这些答案可能会尽可能地简化初始化:(

  • 这是我第一次访问GitHub,我没有使用控制台的经验。我正在使用Bash的MacBook上。当我尝试访问GitHub时,我得到的是: 我试着按照Github页面上关于拒绝权限的说明操作。 这就是我被困住的地方。

  • 问题内容: 我有AngularJS的代码: 在AngularJS 1.5.9中,当我在以下部分中出现错误时: 我收到明确的错误消息: TypeError:无法读取null的属性“ y” 但是在具有相同代码的1.6版中,我得到了一个不同的错误: 可能未处理的拒绝:{}未定义 我知道这与此更改有关,并且单个解决方案通过添加block 非常简单: 现在我又有了我想要的东西: TypeError:无法读取

  • 问题内容: 如果地理位置下降,我需要JavaScript显示手动输入。 我尝试过的 两者均未描述用户以前是否拒绝访问地理位置。 问题答案: 和两个接受时出现错误时被调用的第二回调。错误回调为错误对象提供了一个参数。对于拒绝的权限,将为(数值)。 例: 编辑:正如@Ian Devlin指出的那样,Firefox(本文发布时为4.0.1)似乎不支持此行为。它将按预期在Chrome和 可能 Safari

  • 问题内容: 在Angular应用程序中,我们有一个解决承诺的模式,直到Angular 1.6.0为止,我们的服务一直很好: 这就是我们如何触发业力中的错误: 现在,随着更新至1.6.0,Angular突然在我们的单元测试中(在Karma中)抱怨带有“可能未处理的拒绝”错误的拒绝承诺。但是,我们正在处理第二个调用错误服务的函数中的拒绝。 Angular在这里到底要寻找什么?它希望我们如何“处理”拒绝

  • 我正在构建一个SPFx angular 2组件,它有一个嵌套的子组件。子组件需要引用当前上下文,但如果我引用了: 我得到: SPComponentLoader.LoadComponent:错误:***无法从组件“FFAA6A0E-9EBA-40A0-BEC5-226D1DB53CAF”(RequirementsFormWebPart)加载入口点。defaultLoghandler.error@de