我正在构建一个小型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
一次。),所以在执行所有诺言之后,我真的很想继续在视图中呈现一条新消息。我该怎么做呢?
答案 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