«Тело запроса на обработку ошибок» происходит случайно при отправке изображения в expo / реагировать - PullRequest
1 голос
/ 02 апреля 2020

У меня недавно была проблема с iOS версией приложения, которое я разрабатываю. Часто при отправке изображения на сервер (выбранный с использованием компонента expo-image-picker) возвращается ошибка:

Error procession request body: Error Domain=ABI34_0_0RCTErrorDomain Code=0
"Invalid request token"
UserInfo={NSLocalizedDescription=Invalid request token.}

Это метод отправки данных:

alterUserDataOnDatabase(formValues, callback) {
        fetch(url , {
            method: 'POST',
            headers: {
                Accept: 'application/json',
                'Content-Type': 'multipart/form-data',
            },
            body: formValues
        })
          .then(response => response.json())
          .then(responseJson => callback(responseJson));
}

И это код для получения самого изображения с помощью средства выбора изображений

_pickImage = async () => {
        const {
            status: cameraRollPerm
        } = await ImagePicker.getCameraRollPermissionsAsync();
        //await Permissions.getAsync(Permissions.CAMERA_ROLL);

        // only if user allows permission to camera roll
        if (cameraRollPerm === 'granted') {
            try {
                let pickerResult = await ImagePicker.launchImageLibraryAsync({
                    allowsEditing: true,
                    aspect: [4, 4],
                });

                this._handleImagePicked(pickerResult);
            } catch (e) {
                console.log(e)
            }
        }
};

_handleImagePicked = async pickerResult => {
        try {
            this.setState({
                uploading: true
            });

            if (!pickerResult.cancelled) {
                let uri = pickerResult.uri;
                let uriParts = uri.split('.');
                let fileType = uriParts[uriParts.length - 1];

                this.form.append('photo', {
                    uri: uri,
                    name: `photo.${fileType}`,
                    type: `image/${fileType}`,
                });

                this.setState({
                    image: uri
                });
            }
        } catch (e) {
            console.log({ e });
            alert('Upload failed, sorry :(');
        } finally {
            this.setState({
                uploading: false
            });
        }
};

Я использовал expo и response-native в его 34-й версии, я пробовал их до версии 36, но это не так сделать что-нибудь для этого, ошибка просто изменилась с ABI34 на ABI36.

Ошибка возникает только иногда, что является нечетной частью, кажется, что это происходит случайно, но обычно, после отправки одного изображения, следующее возвращается ошибка, хотя иногда это происходит при первой попытке отправки.

Кто-нибудь знает что-нибудь об этой ошибке, мне трудно найти ответы на нее.

Редактировать: Я пытался создавать новые, пустые приложения на выставке, код и пакеты работают на новое приложение, но, похоже, оно не работает вместе со всеми.

1 Ответ

0 голосов
/ 17 апреля 2020

Я узнал, как это исправить.

Перед отправкой данных на сервер я использовал this.setState(), чтобы запустить анимацию в приложении, чтобы пользователь не мог нажать кнопку после уже отправив данные (для этого я использовал компонент «act-native-loading-spinner-overlay »).

По какой-то причине, которую я не мог различить, обновляя состояние в кадре так как отправка формы с изображением вызовет эту ошибку. Чтобы исправить это, я просто поместил метод отправки данных на сервер на setTimeout и заставил его ждать 100 мс перед отправкой.

...