domain
встроенный модуль будет устаревшим:
Стабильность: 0 - Устаревший
Этот модуль ожидает отмены. После того, как API-интерфейс замены был завершен, этот модуль будет полностью устарел. У большинства конечных пользователей не должно быть причин использовать этот модуль. Пользователи, которые абсолютно должны обладать функциональностью, предоставляемой доменами, могут на это рассчитывать, но в будущем они должны будут перейти к другому решению.
В соответствии с этим они в настоящее время не рекомендуют решение. Но как реализовать функциональность, похожую на нижнюю:
var d = require('domain').create();
d.on('error', function(err) {
console.log(err);
});
d.run(function() {
setTimeout(function () {
throw new Error("Something went really wrong in async code.");
}, 1000);
});
Итак, это обрабатывает ошибки, исходящие из асинхронных файлов, но модуль domain
устарел.
Как перенести этот код на что-то лучше?
Мой случай использования заключается в том, что я пишу библиотеку, которая принимает функцию как входную, и она запускает функцию и отображает результат (на самом деле, вы можете думать о ней как об модульной библиотеке):
myLib.it("should do something", function (done) {
setTimeout(function () {
// Some async code
// ...
// But here an error is thrown
throw new Error("dummy");
}, 1000);
});
Очевидно, что я не хочу разбивать процесс в этом случае, но я хочу показать хорошую ошибку (так что в основном поймать ошибку в этой функции).
В настоящее время в библиотеке я делаю:
var err = null;
try {
fn(callback);
} catch (e) {
err = e;
}
console.log(err || "Everything went correctly");