【发布时间】:2020-05-01 02:24:07
【问题描述】:
我无法理解以下 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 的调用顺序以及它们属于什么承诺。我认为当方法bundleAndApplyDefaults(config) 完成时,第一个.then 会被调用。但我不确定参数cfg 来自哪里。
在函数 start() 内部被调用,第二个 .then 与原始承诺的解析被执行,原始承诺只有 .catch(reject) 在执行器之外,没有 .then 成功,到目前为止据我所知。
在此我也不确定,为什么在 start 方法之后有一个.then,而没有实际的承诺。
感谢您的帮助。
【问题讨论】:
-
"我不确定参数 cfg 来自哪里。" 这是
bundleAndApplyDefaults返回的承诺在解决时将传递给then。
标签: javascript asynchronous promise