Javascript 等待下载方法完成,然后运行next.then-node.js
我试图通过构建一个允许用户下载文件的小应用程序来练习node 我已将文件保存在S3上,将url保存在mLab数据库中,并希望将文件下载到应用程序中,以便在客户端将url用作Javascript 等待下载方法完成,然后运行next.then-node.js,javascript,node.js,express,download,Javascript,Node.js,Express,Download,我试图通过构建一个允许用户下载文件的小应用程序来练习node 我已将文件保存在S3上,将url保存在mLab数据库中,并希望将文件下载到应用程序中,以便在客户端将url用作href。它目前可以工作,但下载的是一个空文件。我认为这是因为它正在下载文件之前运行下一个then() 这是我目前拥有的代码: (async err => { const charge = await stripe.charges // create stripe charge .crea
href
。它目前可以工作,但下载的是一个空文件。我认为这是因为它正在下载文件之前运行下一个then()
这是我目前拥有的代码:
(async err => {
const charge = await stripe.charges
// create stripe charge
.create({
...
})
// when the payment is successful,
// download the file locally to a 'dist' folder
// so we can use it on the success page
.then(() => {
download(url_to_file, "dist").then(() => {
console.log("done!");
});
})
// then render the success page
.then(
res.render("success", {
fileUrl: ...
})
)
因此,在客户端上,我可以(使用ejs)执行以下操作:
我对promises非常陌生,不知道如何等待下载方法完全完成,然后再运行下一个并呈现成功页面
此时,方法运行,然后呈现成功页面,然后文件出现在应用程序中。这允许下载文件,但文件为空
有谁能告诉我正确的方向/解释一下如何在运行下一个
.then()
方法之前等待下载完成?任何帮助都将不胜感激 如果我没有弄错的话,只要返回下载中的承诺即可
不带返回
Promise.resolve()。然后(()=>{
新承诺(解决=>{
设置超时(()=>{
console.log('done1');
解决();
}, 1000);
});
}).然后(()=>{
console.log('done2');
});代码>尝试将呼叫返回到下载;e、 g.:。然后(()=>{返回下载(url到文件“dist”)。然后(()=>{console.log(“done!”);})})
Hi@ScottRudiger,谢谢你的回复。这将正确下载文件,但下载时文件仍然为空。Hi@Mosh,请参阅回复。我刚刚将下载打包成了一个承诺,但在记录所有内容时,它会启动下载,呈现成功页面,然后完成下载<然后(()=>{Promise.resolve()。然后(()=>{return new Promise(resolve=>{console.log(“开始下载”);return download(fileUrl,“dist”)。然后(()=>{console.log(“下载”);});resolve();})。然后(…)
我在错误的地方使用了resolve()。它现在以正确的顺序运行所有方法,但是下载的文件仍然是空的。当查看项目文件夹时,它肯定在那里并且看起来很好,所以不确定为什么下载时它会说它是空的,这是另一个问题。我没有足够的信息来试图弄清楚。如果您尝试直接从url\u to\u文件
(使用brwoser或其他工具)获取文件,您是否获得了正确的文件?是的,当I console.log时,它会显示正确的url,并且在实际的项目文件夹中正确显示,当我打开它时,文件(mp3)会播放,但是由于某种原因,从浏览器下载的文件是空的。download
方法是什么样子的?是否来自第三方软件包?