Я новичок в Node и сейчас пытаюсь попрактиковаться в чистом скрипте Node без сторонних пакетов npm.Первая проблема, с которой я столкнулся, это то, что мой код начал выглядеть как знак > .Я имею в виду, что у меня был обратный вызов внутри обратного вызова внутри обратного вызова и так далее ... Примерно так:
fs.open(‘filename.json’, 'wx', (error, fileDescriptor) => {
if (!error && fileDescriptor) {
// Do something with the file here ...
fs.writeFile(fileDescriptor, newData, (error) => {
if (!error) {
fs.close(fileDescriptor, (error) => {
if (!error) {
callback(false);
} else {
callback('Error closing the file');
}
});
} else {
callback('Error writing to new file');
}
});
} else {
callback('Could not create new file, it may already exists');
}
});
Это простой пример, но у нас может быть гораздо более сложная логика, которая может включать в себя более асинхронные шаги и, следовательно, более глубокий уровень обратных вызовов.Хотя в приведенном выше примере я использовал модуль fs
, квест все еще более общий.Мы можем попасть в ситуацию обратного вызова при использовании других модулей (например, zlib.gzip(str, callback)
).
Поэтому мой вопрос Есть ли у нас какие-либо общие практики, позволяющие избежать этого кода обратного вызова внутри обратного вызова и заставить его выглядетьболее прямолинейным и читаемым и в то же время сохраняющим его асинхронным?
Я полагаю, что можно разбить код на более детализированные модули и не иметь многоуровневой асинхронной логики вто же самое место.Я также предполагаю, что есть некоторые пакеты, такие как async , которые могут помочь с этим.Но все же есть ли общие языковые практики / структуры, чтобы сделать такой код обратного вызова внутри обратного вызова более плоским без использования внешних помощников?