【问题标题】:Array returns undefined after promise in AngularJSAngularJS中的承诺后数组返回未定义
【发布时间】:2019-12-02 18:49:22
【问题描述】:

我有这个来自 Angular 的脚本。问题有时是 p.products 显示未定义。有时工作有时不是我已将承诺放在 settimeout 函数中但未解决。 Packages Products Called 1 每次都调用成功,但在 promise 运行后有时会显示 p.products 未定义。

.directive('packagesBrowser', function() {
    return {
      scope: {
        select: '='
      },
      templateUrl: 'packages-browser.html',
      controller: [
        '$scope', 'Packages', 'Store', 'Inventory', function($scope, Packages, Store, Inventory) {
          $scope.packageOptions = {};
          $scope.packages = Packages;
          console.log('Packages Products Called 1');
          Packages.$promise.then(function() {
            return Packages.forEach(function(p) {
              if (!p.products) {
                return;
              }
              $scope.packageOptions[p.id] = p.products.map(function(product) {
                return {
                  product_id: product.product.id,
                  quantity: product.quantity
                };
              });
              return console.log('Packages Products Called 2');
            });
          });
          return Store.$promise.then(function() {
            return $scope.available = function(id) {
              return (Inventory.list[id] && Inventory.list[id].available) || 0;
            };
          });
        }
      ]
    };
})

【问题讨论】:

  • 包(“p”)对象应该包含什么?当 p.products 为假时,也许 console.log 将它放在 if/return 之上?
  • 在不知道 Packages 做什么的情况下说不出来。显然,无论Packages 包含什么,其中至少有一个没有products 属性。
  • array.forEach 方法返回undefinedconsole.log 方法返回 undefined。 AngularJS 控制器忽略返回值。通常通过返回一个值来解决 promise .then 方法。在这种情况下,值是一个函数。很难理解这段代码的意图。至于“承诺后数组返回未定义”,不清楚你在问什么。

标签: javascript angularjs promise


【解决方案1】:

您似乎缺少一个参数.. results 在这种情况下

试试这个:

Packages.$promise.then(function(results) {
        return results.data.forEach(function(p) {

【讨论】:

  • 此答案假定承诺以一个值解析,这在问题中尚不清楚。它还假定该值具有 data 属性,该属性是一个数组。本质上,这是一个猜测。
  • 是的,我同意,但它可能会让 OP 走上正确的道路。无论如何,我认为我的回答不应该被否决。我只是想帮忙。
  • 您有足够的代表发表评论;您可以通过评论提供帮助,要求对情况的细节进行更多说明。当您知道问题是什么以及答案是什么时,答案就是对问题的答案。
  • 如果PackagesngResource 查询方法返回的数组,则它有一个名为$promise 的属性解析为Packages。在Packages 上执行.forEach 的OP 代码是正确的(尽管有些草率)。如果它确实是一个$resource 数组,它没有名为data 的属性。您的回答是错误的,并且会分散解决 OPs 问题的注意力。
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2021-07-07
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多