我正在尝试通过构建一个允许用户下载文件的小型应用程序来练习节点。
我已将文件保存在S3上,将URL保存在mLab DB中,并希望将文件下载到应用程序,以便可以在客户端将URL用作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)执行以下操作:
<a href="<%= /dist/fileUrl %>">Download</a>
我对诺言很陌生,不确定在运行下一个然后呈现成功页面之前如何等待下载方法完全完成。
此刻,该方法运行,然后呈现成功页面,然后该文件出现在应用程序中。这样可以下载文件,但文件为空。
有人可以向我指出正确的方向/解释如何在运行下一个.then()
方法之前等待下载完成吗?任何帮助将不胜感激!
答案 0 :(得分:1)
如果我没有记错的话,只需return
的{{1}}中的承诺。
没有download
return
使用Promise.resolve().then(()=> {
new Promise(resolve => {
setTimeout(() => {
console.log('done 1');
resolve();
}, 1000);
});
}).then(() => {
console.log('done 2');
});
return