#javascript
#javascript
Вопрос:
Я новичок в javascript и пытался выяснить, почему следующий код не работает:
let ws = new WebSocket("ws://echo.websocket.org/");
ws.onmessage = msg => console.log(msg);
let queue = [];
ws.onopen = () => {
queue.forEach(msg => ws.send(msg));
};
const send = () => {
if(ws.readyState === ws.OPEN){
ws.send(msg);
}
else{
queue.push(msg);
}
};
send("foo");
send("bar");
Затем я понял, что мне нужно : let send = (msg) => {
.
Прежде чем обнаружить проблему, я использовал инструменты lint и dev, но я не видел никаких предупреждений. Что я должен делать, чтобы найти какие-то проблемы?
Комментарии:
1. Разве у вас нет ошибки » ReferenceError: сообщение об ошибке не определено «?
2. @Нет, я не вижу этого предупреждения. Я использую Firefox 49.0.1. Должен ли я использовать что-то еще?
3. Я нахожусь на 50.0b3, и когда я копирую ваш код в ES6Fiddle, я получил сообщение об ошибке из babel.js
4. @Kaiido Если я запущу es6fiddle.net/iu3r5ofj Я ничего не вижу в окне консоли devtools. Я регистрирую ошибки, предупреждения, информацию, журнал.
5. просто попробовал в старом FF38, в FF47 и в последней стабильной версии 49.0.1, и у меня всегда есть сообщение…
Ответ №1:
eslint. Для этого даже есть специальное правило: http://eslint.org/docs/rules/no-undef
Вероятно, вы должны получить ReferenceError , потому что ваш let / const подразумевает строгий синтаксис, хотя, если вы пропустили это, я предполагаю, что ваш движок по какой-либо причине не работал в строгом режиме. В любом случае, эту ошибку лучше найти с помощью статического анализа, потому что он обнаружит ошибку, даже если функция никогда не вызывалась.
Ответ №2:
Я рекомендую вам попробовать TypeScript. Взгляните на свой пример на console.log(msg);
let queue = [];
ws.onopen = () => {
queue.forEach(msg => ws.send(msg));
};
const send = () => {
if(ws.readyState === ws.OPEN){
ws.send(msg);
}
else{
queue.push(msg);
}
};
send(«foo»);
send(«bar»);» rel=»nofollow»>TypeScript playground.
Он сразу же сообщит вам: Cannot find name msg
внутри вашей send
функции.