在React应用程序中从es5转换为es6代码

问题描述 投票:0回答:1

我是ES6的新手,我需要将一段代码从ES5转换为ES6。

我已经开始研究它了,但是我对如何转换某些部分如.apply ...感到困惑。

这是我想转换的代码:

export default class AdobeHeartbeatAdapter {
  constructor(MediaHeartbeat, delegate, config) {
    this._queuedAPICalls = [];
    this._tracker = null;
    this._creatingTracker = true;
    this._internalError = false;
    const self = this;
    MediaHeartbeat.getInstance(delegate, config)
      .then(tracker => {
        setTimeout(() => {
          self._creatingTracker = false;
          self._tracker = tracker;
          self._queuedAPICalls.forEach(apiCall => {
            self[apiCall].apply(self._tracker, apiCall.arguments2);
          });
        }, 5000);
      })
      .catch(error => {
        console.log(error);
        this._internalError = true;
      });

    const apis = [
      'trackSessionStart',
      'trackSessionEnd',
      'trackComplete',
      'trackPlay',
      'trackPause',
      'trackEvent',
      'trackError',
    ];
    apis.forEach(api => {
      AdobeHeartbeatAdapter.prototype[api] = function() {
        if (this._internalError) {
          console.log('Error creating MediaHeartbeat instance. API call is dropped.');
          return;
        }

        if (this._creatingTracker) {
          console.log('Creating MediaHeartbeat instance. Queuing current API call.');
          this._queuedAPICalls.push({
            name: api,
            arguments2: arguments,
          });
          return;
        }

        this._tracker[api].apply(this._tracker, arguments);
      };
    });
  }
}

[如果有人可以帮助我。

非常感谢。

ecmascript-6 ecmascript-5
1个回答
0
投票

实际上,通过设置setTimeOut并因此将事件添加到队列,我有一个错误。

错误:self[apiCall].apply(self._tracker, apiCall.arguments2);

和消息:TypeError: Cannot read property 'apply' of undefined

任何想法?

PS:如果没有事件添加到队列中,它将正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.