Ember.js 限制余烬数据请求
我正在使用Ember数据与具有速率限制的RESTAPI交互Ember.js 限制余烬数据请求,ember.js,ember-data,throttling,Ember.js,Ember Data,Throttling,我正在使用Ember数据与具有速率限制的RESTAPI交互 关于如何将余烬数据请求限制为每秒X个请求,有什么建议吗?经过一番努力,我终于在ApplicationController中开始工作了。要限制每秒4个请求,请执行以下操作: import PromiseThrottle from 'dispatcher/application/promise-throttle'; import { Promise } from 'rsvp'; export default DS.RESTAdapter.
关于如何将余烬数据请求限制为每秒X个请求,有什么建议吗?经过一番努力,我终于在ApplicationController中开始工作了。要限制每秒4个请求,请执行以下操作:
import PromiseThrottle from 'dispatcher/application/promise-throttle';
import { Promise } from 'rsvp';
export default DS.RESTAdapter.extend(DataAdapterMixin, {
init() {
this.set('promiseThrottle', new PromiseThrottle({
requestsPerSecond: 4,
promiseImplementation: Promise
}));
},
ajax: function (url, type, options) {
return this.get('promiseThrottle').add(this._super.bind(this, url, type, options));
}
...
});
首先,如果您想处理所有AJAX请求,我强烈推荐ember AJAX。这为您提供了修改所有AJAX请求的单一点。接下来是节流。我在评论中建议ember并发,所以让我详细说明一下。ember并发为您提供了一个超时方法,该方法返回一个承诺,该承诺将在一定时间后解析。这允许轻松投掷:
export default AjaxService.extend({
ajaxThrottle: task(function * (cb) {
cb();
// maxConcurrency with timeout 1000 means at maximum 3 requests per second.
yield timeout(1000);
}).maxConcurrency(3).enqueue(),
async request() {
await new Promise(cb => ajaxThrottle.perform(cb));
return this._super(...arguments); // this should make the actual request
},
});
我会检查余烬并发。如果您将AJAX请求放在适配器中的任务中,我认为这并不难。ember-concurrency可以通过并发请求的数量来限制。但我不知道如何通过时间限制来限制它——例如,每分钟不超过5个请求。