【发布时间】:2019-02-18 11:30:41
【问题描述】:
我创建了一个脚本,它遍历一堆文件夹并将它们分别处理到 webpack 包中。这很好用,只是我不知道为什么循环周围的Promise 没有解决。
我尝试过的一些事情:
- 如果我在
resolve()之前放置一个console.log("hello world"),在} else { ... }中,它会输出日志。 - 如果我将
resolve()移出} else { ... },它会解决,但我的 gulp 任务的其余部分不会继续(单独但相关的问题)。
如果您能帮我解决这个问题,我将不胜感激。最相关的代码块在下面,其余的在下面的链接中。
// process all the script folders
const process_script_folders = () => {
return new Promise((resolve) => {
const FOLDER = script_folders.shift();
// lint all scripts, except for critical
if (FOLDER !== "critical") {
const linted = lint_scripts(js_directory, FOLDER + ".js", source_directory + "/" + FOLDER + "/**/*");
merged_streams.add(linted);
}
process_scripts(js_directory, FOLDER + ".js", source_directory + "/" + FOLDER + "/**/*").then((processed) => {
merged_streams.add(processed);
if (script_folders.length > 0) {
process_script_folders();
} else {
// @TODO figure out why this isn't resolving
resolve();
}
});
});
};
return process_script_folders().then(() => {
// ... do stuff
console.log("Testing"); // currently never output
});
【问题讨论】:
-
你需要
return resolve();吗? -
您的递归调用
process_script_folders()无法解析外部调用返回的承诺 -
@bergi 我想我明白你的意思,但我不太确定如何处理它。承诺对我来说仍然是新的;你能举个例子来说明如何实现吗?
-
您递归地调用 process_script_folders() 方法并在另一个 Promise 中解析该 Promise。 resolve() 不会被调用,因为你没有 resolve() 你的第一个承诺,所以 then 方法不会被第一个执行,因为你的 resolve 方法也不会被调用。
标签: javascript node.js promise gulp resolve