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

无法获得ES6承诺值以在AngularJS视图中显示

支智志
2023-03-14
问题内容

我正在尝试使用Pinterest JavaScript
SDK来获取项目的一些固定数据。我在创建的Pinterest服务中有一个方法,该方法在HomeController中被调用。我尝试将响应放入承诺中,以便将其放在HomeController上$scope并在视图中显示。但是,在我看来,$
scope.pins是未定义的。为什么呢undefined?似乎诺言正在奏效。还在学习承诺。

Pinterest服务

function getBoardPins (id) {
  return new Promise(function (resolve, reject) {
    PDK.request('/v1/boards/' + id + '/pins/', 'GET', {fields: 'id,link,url,creator,board,created_at,note,color,counts,media,attribution,image,metadata'}, function (response) {
      if (response) {
        resolve(response);
      }

      reject();
    });
  });
}

家庭控制器

Pinterest.getBoardPins('490329546869188172').then(function (response) {
  $scope.pins = response.data;
});

视图

<h1>Pinterest</h1>
<div ng-repeat="pin in pins">
  <div>{{pin}}</div>
</div>

问题答案:

使用$q.when的ES6承诺转换为AngularJS承诺:

$q.when(Pinterest.getBoardPins('490329546869188172'))
  .then(function (response) {
    $scope.pins = response.data;
});

AngularJS通过提供自己的事件处理循环来修改常规JavaScript流。这将JavaScript分为经典和AngularJS执行上下文。
只有在AngularJS执行上下文中应用的操作才能从AngularJS数据绑定, 异常处理,属性监视等中 受益

要将ES6承诺带入AngularJS执行上下文,请使用$q.when

$ q.when

将可能是值或(第三方)之后可承诺的对象包装为$q承诺。当您处理的对象可能是或不是承诺时,或者承诺来自不可信任的来源时,此功能很有用。

— AngularJS $ q服务API参考-$
q.when

或者使用[$

q构造函数](https://docs.angularjs.org/api/ng/service/$q#-q-constructor)创建promise

function getBoardPins (id) {
  //return new Promise(function (resolve, reject) {
  return $q(function (resolve, reject) {
    PDK.request('/v1/boards/' + id + '/pins/', 'GET', {fields: 'id,link,url,creator,board,created_at,note,color,counts,media,attribution,image,metadata'}, function (response) {
      if (response) {
        resolve(response);
      }

      reject();
    });
  });
}

这创建了一个与AngularJS框架及其摘要周期集成的承诺。



 类似资料:
  • 问题内容: 我正在从Angular的文档中查看此示例,但是我认为这可能总体上适用于Promise。下面的示例是从文档中逐字复制的,并附有评论: 我不清楚这是如何工作的。如果我可以调用第一个的结果并将它们链接起来(据我所知),那么它就是一个类型为Promise的对象。这不是一个。那么,“它的值将是promiseA的结果增加1”的含义是什么? 我应该以这种方式访问吗?成功回调如何返回承诺并返回“结果+

  • 问题内容: 以下是用于从共享点检索信息的控制器。我可以看到调试显示条目具有需要在视图中呈现的属性值。我如何从结果承诺中获得那个价值? 我试图将其放入柜台,但没有显示。任何帮助,将不胜感激。 问题答案: 不要使用jQuery ,而要使用$ http服务: 然后从返回的promise中提取数据: $ http服务返回的promise已与AngularJS框架集成。只有在AngularJS执行上下文中应

  • 问题内容: AngularJS文档说: $ qpromise由模板引擎以角度识别,这意味着在模板中,您可以将附加到作用域的promise视为它们的结果值。 所以有人可以解释一下这种提琴无法正常工作的原因吗?不可能更改文本字段的值。但是分配保证$http服务返回作用域字段的工作就像一个超级按钮。 控制器: HTML: 问题答案: 您需要在promise对象上使用then()函数: 就您而言,我认为您

  • 问题内容: 我有一个名为PaymentStrategy的服务,已注入我的控制器中。 paymentStrategy中的这种购买方法会触发几种需要顺序调用的方法。当buy()中的所有方法都完成后,需要调用then()。 这可能是微不足道的,但我对棱角还很陌生。 目前,在init()方法之后立即触发buy()。then()。我觉得我们需要将所有这些方法放在一个promise中,并应用$ q.all()

  • 问题内容: 我有一个使用$ resource的简单控制器: 我在指令中使用此控制器(在链接功能中) 但是区域是不确定的。调用是异步的,这很逻辑。 我的问题是我该如何等待结果和区域成为包含所有数据的数组? 这里指令的定义 问题答案: 如果要使用异步方法,则需要通过$ promise使用回调函数,示例如下:

  • 问题内容: 这是我的plnkr:http ://plnkr.co/edit/n8cRXwIpHJw3jUpL8PX5?p=preview 您必须单击li元素,然后表格会出现。输入一个随机字符串,然后点击“添加通知”。代替textarea文本,您将得到未定义。 标记: JS部分: 返回“未定义”。我注意到当使用angular-ui的ui-if时,这不起作用。任何想法为什么这不起作用?如何解决? 问题