icw82
@icw82
Веб-разработчик

Как лучше отлавливать ошибки внутри Object.observe()?

Здравствуйте.

Ошибки внутри Object.observe() не выводятся в консоль, при этом если обернуть внутренности callback-функции в try...catch, то эти ошибки ловятся, но без остановки выполнения кода.

Пример без try...catch:
var test = [0,1];

function observer(){
    'use strict';
    a = 0; // должно вызвать ошибку
}

Object.observe(test, observer);
test.push(2); // не вызовет ошибку

Пример с try...catch:
var test = [0,1];

function observer(){
    'use strict';
    try {
        a = 0; // должно вызвать ошибку
    } catch (error) {
        console.error(error)
    }
}

observer() // вызовет сообщение console.error(error)

Object.observe(test, observer);
test.push(2); // вызовет сообщение console.error(error)


Интересует: почему ошибки внутри Object.observe() не вызывают остановку кода и не выводятся в консоль? Можно ли обойтись без try...catch?
  • Вопрос задан
  • 2333 просмотра
Решения вопроса 1
icw82
@icw82 Автор вопроса
Веб-разработчик
Обнаружил коммит по теме: https://github.com/v8/v8/commit/db0a63d2c08a2404a8... → багрепорт был ещё в январе 2014: https://code.google.com/p/chromium/issues/detail?i...

Думаю в ближайшем будущем данной проблемы не станет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
aen
@aen
Keep calm and 'use strict';
А не рано ли вы начали использовать Object.observe? Это же еще черновик.
Ответ написан
Функция-обсервер выполняется асинхронно и, соответственно, не вызывает остановки синхронного кода.

Гуглите отладку ошибок в асинхронном коде, так как я слабо понимаю, чего именно вы хотите добиться. Была бы Node.js - посоветовал бы домены. Promise слабо подходят для отладки ошибок в событиях.

Хотите подобного, но синхронно - пробуйте Proxy. Хотя они совсем сырые, за ключом и подойдут далеко не всегда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы