Где я могу обработать ошибку соединения пероsjs / socketio-client - PullRequest
0 голосов
/ 24 марта 2019

Я использую перья с сокетио в бэкэнде. Клиент слушает, и все работает хорошо.

Я хочу обработать ошибку «сервер не отвечает» и не могу найти, где я могу это сделать?

Ошибка, выданная сервером:

"Unhandled promise rejection 
Object { type: "FeathersError", name: "Timeout", message: "Timeout of 5000ms exceeded calling find on newsfeed", code: 408, className: "timeout", data: {…}, errors: {}, stack: "FeathersError@webpack-internal:///./node_modules/@feathersjs/errors/lib/index.js:58:19\nTimeout@webpack-internal:///./node_modules/@feathersjs/errors/lib/index.js:135:3\nsend/</timeoutId<@webpack-internal:///./node_modules/@feathersjs/transport-commons/lib/client.js:66:9\n" }"

Правильно, «обещание» не выполнено! Куда мне обращаться?

Я попытался добавить catch в каждой строке, чтобы посмотреть, что работает, но безуспешно:

import feathers from '@feathersjs/feathers'
import socketio from '@feathersjs/socketio-client'
import io from 'socket.io-client'

const socket = io('http://localhost:3030/', {transports: ['websocket']});
socket.on("connect_failed", er=>console.error('Error connecting to server: ', er));
const restApi = feathers()
  .configure(socketio(socket));

try {
  restApi.service('/newsfeed');
  restApi.on("connect_failed", er=>console.error('Error connecting to server: ', er));

}
catch (er) {
    console.error('Error connecting to server: ', er)
}

export default restApi

1 Ответ

0 голосов
/ 10 апреля 2019

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

restApi.service('/newsfeed').find()

Если вы используете async / await, выможет обернуть ваш сервисный звонок в попытку / поймать, или мой личный фаворит просто ставит ловушку на звонок;

// try/catch
try {
  const response= await restApi.service('/newsfeed').find();
catch(e) {
  // handle e
}

//just use catch
const response= await restApi.service('/newsfeed').find().catch(e => {
  // handle e
});

Если вы используете обещания, просто используйте ловушку:

restApi.service('/newsfeed').find().then(response => {
  // handle response
}).catch(e => {
  // handle e
});
...