Ошибка: Uncaught (в обещании) TypeError: _this2.next не является функцией реагировать - PullRequest
0 голосов
/ 03 декабря 2018

Я получил эту ошибку. Не могли бы вы помочь мне устранить эту ошибку?У меня есть 4 дела в моем заявлении.Вы можете просмотреть мой код шага 2 в случае 1. Пожалуйста, помогите мне, я действительно застрял

case 1:
        // code run for step 2

        const reader = new FileReader();
        const storeUser = JSON.parse(localStorage.getItem('user'));
        reader.onload = function(upload) {
          fetch(`...../api/s3/uploadtoaws`, {
            headers: {
              Accept: 'application/json',
              'Content-Type': 'application/json',
            },
            method: 'POST',
            body: JSON.stringify({
              userId: storeUser._id,
              type: 'employee',
              content: upload.target.result,
              key: 'e.file.name',
              oldKey: '',
            }),
          })
            .then(response => response.json())
            .then(res => {
              if (res.error) {
                console.warn(res);
              } else {
                console.warn(res);
                this.next();
              }
            })
            .done();
        };
        reader.readAsDataURL(values.picture.file.originFileObj);
        break;

1 Ответ

0 голосов
/ 03 декабря 2018

reader.onload = function (upload) {

Поскольку это нормальная функция, ее значение this определяется тем, как ее вызывали.Я предполагаю, что FileReader вызывает его с this, равным глобальному объекту (в строгом режиме) или неопределенным (в строгом режиме).Хотя, поскольку я не уверен, как реализован этот код FileReader, он может иметь this, равный чему-то другому, например, самому читателю файлов.В любом случае, позже, когда вы вызываете this.next, this не равно тому, что вы думаете.

Если вы измените это на функцию стрелки, она получит значение this изгде это определено.

reader.onload = (upload) => {

Обратите внимание, что этого может быть недостаточно, поскольку это также зависит от того, какой код окружает приведенный вами пример.Вам может понадобиться превратить другие функции в функции стрелок и / или использовать function.prototype.bind

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...