asynchrounsly下载文件并与Node JS同步解析它们

时间:2018-04-10 15:25:29

标签: node.js asynchronous promise gulp

我有一个gulp任务,从GitHub下载一些JSON文件,然后提示用户在这些文件中替换值。例如,我有.ftpconfig下载,然后要求用户输入主机名,用户名,密码和路径。

因为首先需要先下载文件才能配置它,并且需要按顺序配置每个文件,所以我使用了很多嵌套的回调。我想改变这个"回调地狱"系统,以便它使用异步/等待和/或承诺,但我很难理解为什么我的代码不工作;承诺似乎异步地触发了.then()函数,这对我来说没有意义。

我的目标如下:

  1. 异步下载所有配置文件
  2. 等待所有配置文件完成下载
  3. 从配置文件中读取现有设置
  4. 同步提示用户更改每个配置文件中的设置
  5. 我尝试过多种方法,但没有一种方法可行。我放弃了我使用过的代码,但这里重复了我曾经尝试过的事情:

    尝试#1:

    return new Promise((resolve) => {
        // download files...
    }).then((resolve) => {
        // configure first file...
    }).then((resolve) => {
        // configure second file...
    }).then((resolve) => {
        // configure thrid file...
    });
    

    尝试#2:

    const CONFIG_FILES = async () => {
        const bs_download    = await generate_config("browsersync");
        const ftp_download   = await generate_config("ftp");
        const rsync_download = await generate_config("rsync");
    
        return new Promise(() => {
            configure_json("browsersync");
        }).then(() => {
            configure_json("ftp");
        }).then(() => {
            configure_json("rsync");
        });
    };
    

    我确定我做的事情显然是错误的,但是我在JavaScript上没有足够的适应性来看问题。任何帮助都将非常感激。

    我的gulp任务可以在这里找到:

1 个答案:

答案 0 :(得分:0)

感谢@EricB,我能够弄清楚我做错了什么。这主要是让我的函数也回归承诺。

https://github.com/JacobDB/new-site/blob/d119b8b3c22aa7855791ab6b0ff3c2e33988b4b2/gulp-tasks/config.js