Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待下载方法完成,然后运行next.then-node.js_Javascript_Node.js_Express_Download - Fatal编程技术网

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

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

我试图通过构建一个允许用户下载文件的小应用程序来练习node

我已将文件保存在S3上,将url保存在mLab数据库中,并希望将文件下载到应用程序中,以便在客户端将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)执行以下操作:

我对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
方法是什么样子的?是否来自第三方软件包?