gpt4 book ai didi

javascript - 等待下载方法完成,然后再运行 next.then - node.js

转载 作者:行者123 更新时间:2023-11-29 23:04:45 24 4
gpt4 key购买 nike

我正在尝试通过构建一个允许用户下载文件的小型应用程序来练习 Node 。

我已将文件保存在 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>

我对 promises 很陌生,不确定如何等待下载方法完全完成,然后再运行下一个 then 并呈现成功页面。

此时,方法运行,然后成功页面呈现,然后文件出现在应用程序中。这允许下载文件,但文件为空。

任何人都可以指出我正确的方向/解释如何在运行下一个之前等待下载完成 .then()方法?任何帮助将不胜感激!

最佳答案

如果我没记错的话,只需从 download返回 promise。

没有return

Promise.resolve().then(()=> {
new Promise(resolve => {
setTimeout(() => {
console.log('done 1');
resolve();
}, 1000);
});
}).then(() => {
console.log('done 2');
});

使用return

Promise.resolve().then(()=> {
return new Promise(resolve => {
setTimeout(() => {
console.log('done 1');
resolve();
}, 1000);
});
}).then(() => {
console.log('done 2');
});

关于javascript - 等待下载方法完成,然后再运行 next.then - node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54980080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com