Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 限制余烬数据请求_Ember.js_Ember Data_Throttling - Fatal编程技术网

Ember.js 限制余烬数据请求

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.

我正在使用Ember数据与具有速率限制的RESTAPI交互


关于如何将余烬数据请求限制为每秒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个请求。