如何将 ngTable 上的属性设置变成承诺?
How do I turn setting a property on ngTable into a promise?
我正在尝试 'promisify' 以下调用:
$scope.productsTable.params.page(page);
我的目标是手动跳转到某个页面,然后在页面加载后在该页面上做一些事情。
问题是 page()
方法没有 return 承诺,所以我必须手动创建一个。我只是不确定该怎么做。
有人提到我可以使用 $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
在您的情况下,页面方法不会 return 来自源代码的任何承诺只是返回参数对象或工厂。通过使用 promise.all 将多个 promise 合并为一个 promise,当所有输入 promise 都被解析时,该 promise 被解析。如果没有承诺,意味着你不需要等待承诺,如果存在你应该等待解决
我正在尝试 'promisify' 以下调用:
$scope.productsTable.params.page(page);
我的目标是手动跳转到某个页面,然后在页面加载后在该页面上做一些事情。
问题是 page()
方法没有 return 承诺,所以我必须手动创建一个。我只是不确定该怎么做。
有人提到我可以使用 $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
在您的情况下,页面方法不会 return 来自源代码的任何承诺只是返回参数对象或工厂。通过使用 promise.all 将多个 promise 合并为一个 promise,当所有输入 promise 都被解析时,该 promise 被解析。如果没有承诺,意味着你不需要等待承诺,如果存在你应该等待解决