快速表达视图后,更新视图中的消息(一旦执行异步代码)

时间:2018-12-15 23:55:24

标签: javascript node.js express

我正在构建一个小型Express应用程序,该应用程序基本上只是从目录中读取文件,将其重命名,然后压缩文件,现在文件的读取和重命名部分是同步完成的,压缩部分是异步完成的,然后我的应用程序呈现另一个视图,所以我的逻辑如下所示:

/*
    // file read and renaming code here
 */

// Zip files code below:

try {
        let files_converted = fs.readdirSync(OUTPUT_DIRECTORY);
        let file_converstion_async_array = [];

        files_converted.forEach( (e , i) => {
            file_converstion_async_array.push( () => zip_Directory( `${OUTPUT_DIRECTORY}/${e}` ,  `${OUTPUT_DIRECTORY}/${e}.zip` ) );
        });

        console.log('Files are being zipped...');        

        file_converstion_async_array.reduce( ( promise_chain , current_promise ) => {

            return promise_chain.then( p_results => {
                return current_promise().then( c_result => {
                    // console.log('ZIPPED');
                });
            });

        } , Promise.resolve([]) ).then( () => {
            console.log('All Files have been zipped...');
        });

    } catch (err) {
        console.error(err);
    }

  // Finally render a new view 

    res.render("finish", {
       name: req.body.outputPath
    });

现在发生的事情是运行同步代码,然后呈现新视图,然后异步代码继续在后台运行。我想做的是,一旦异步代码执行完毕,以便用新消息更新我的视图,如何在不显示另一个新视图的情况下做到这一点(我不确定这是可能的,因为我尝试了此操作,我相信您只能使用res.render一次。),所以在执行所有诺言之后,我真的很想继续在视图中呈现一条新消息。我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

关于无法发送多个name = input("Enter a name for your Character: ") if name == 'main()': name = 'Dave' age = input("What is your Character's Age?: ") if age == 'main()': age = '15' print("" + name + " is " + age + " years old.") ,您是正确的。在标准HTTP中,客户端希望收到固定的内容长度,以后您将无法在发送时对其进行更改。

通常,当您想要实现这样的目标时,请您的客户端发送第二个请求,该请求将一直阻塞,直到服务器完成其异步操作为止。您可以使用websocket连接或非常复杂的连接,但这是一个利用express的动态使用路由功能的小示例:

res.render