如何将在 ngTable 上设置属性转变为承诺

How do I turn setting a property on ngTable into a promise?

本文关键字:属性 转变 承诺 设置 ngTable      更新时间:2023-09-26

我试图"承诺"以下调用:

$scope.productsTable.params.page(page);

我的目标是手动跳转到某个页面,然后在页面加载后在该页面上执行一些操作。

问题是 page() 方法不返回 promise,所以我必须手动创建一个。我只是不知道该怎么做。

有人提到我可以使用$q.when(params.page(n)),但这不起作用...所以也许我用错了?

这是page()方法:https://github.com/esvit/ng-table/blob/master/ng-table.js#L148-L150

然后触发$watch(调用使用 ajax 的reload())。

https://github.com/esvit/ng-table/blob/master/ng-table.js#L481-L492

我正在考虑尝试创建自己的自定义page()方法,该方法不会触发手表,并手动(或getData)调用重新加载。不知道该怎么做。

这是我的实际表格

$scope.productsTable.params = new ngTableParams({
  page:  1,
  count: 200
}, {
  counts: [20, 50, 200, 500, 1000, 2000],
  filterDelay: 0,
  total: 0,
  getData: function($defer, params) {
    Model.apiFullResponse.('ajax endpoint stuff')
    .then(function(response) {
      $scope.products = response.data;
      // stuff
      $defer.resolve($scope.products);
    });
  }
});

我理想的解决方案是最终得到这样的东西......

$scope.productsTable.params.page(page).then(function() {
  // do stuff
});

尝试

 var promise = $q.when($scope.productsTable.params.page(page))
  if(promise.then)
     promise.all(function(){//do staff})
  else
   //do staff without promise

在您的情况下,页面方法不会从源代码返回任何承诺,只是重新创建参数对象或工厂。通过使用 promise.all 将多个承诺合并为一个承诺,当解析所有输入承诺时,将解析该承诺。如果没有承诺,意味着你不需要等待承诺,如果存在你应该等待解决