У меня проблемы с пониманием следующего javascript кода:
/**
* Outputs the result of compiling a template.
*
* @module generator.generate
* @param {Object} config Configuration options
* @param {Object|String} config.asyncapi AsyncAPI JSON or a string pointing to an AsyncAPI file.
* @param {String} config.target_dir Path to the directory where the files will be generated.
* @return {Promise}
*/
generator.generate = config => new Promise((resolve, reject) => {
bundleAndApplyDefaults(config)
.then((cfg) => {
async function start () {
await registerHelpers(cfg);
await registerPartials(cfg);
await generateDirectoryStructure(cfg);
}
start().then(resolve).catch(reject);
})
.catch(reject);
});
Более конкретно, в каком порядке вызываются .then
и какому обещанию они принадлежат. Я думаю, что первый .then
вызывается, когда метод bundleAndApplyDefaults(config)
завершен. Но я не уверен, откуда берется параметр cfg
.
Внутри функции start()
вызывается и выполняется вторая .then
с разрешением исходного обещания, только исходное обещание. поймать (отклонить) за пределами исполнителя и нет .then
для успеха, насколько я знаю.
При этом я также не уверен, почему существует .then
после метода запуска, когда нет реального обещания .
Я ценю любую помощь.