Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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异步函数_Javascript_Asynchronous_Async Await - Fatal编程技术网

循环中的Javascript异步函数

循环中的Javascript异步函数,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我用异步函数download_file()编写了以下代码,它仅在作为单个函数运行的情况下才能正常工作,但在循环中,它不会等待迭代结束。 我假设您希望每次迭代都等待download\u file函数结束,如果是这样,则您的download\u file函数应返回一个Promise函数,该函数在您完成下载并按照代码编写内容时会得到解决,目前它没有返回任何内容,因此在它不执行任何操作之前等待。我假设您希望每次迭代都等待下载\u文件函数结束,如果是这样,则您的download\u文件函数应返回一个Pr

我用异步函数download_file()编写了以下代码,它仅在作为单个函数运行的情况下才能正常工作,但在循环中,它不会等待迭代结束。


我假设您希望每次迭代都等待
download\u file
函数结束,如果是这样,则您的
download\u file
函数应返回一个
Promise
函数,该函数在您完成下载并按照代码编写内容时会得到解决,目前它没有返回任何内容,因此
在它不执行任何操作之前等待

我假设您希望每次迭代都等待
下载\u文件
函数结束,如果是这样,则您的
download\u文件
函数应返回一个
Promise
,每当您完成下载并按照代码编写内容时,该问题就会得到解决,目前它没有返回任何内容,因此
等待
之前它不会做任何事情。

只需添加
等待
即可让节点等待结果

await (async () => {

  for (let year of years) {
    for (let month of months) {
        for (let r of day_rng) {
           await download_file(year, month, r);
          }
    }
  }

})();

只需添加
wait
即可让节点等待结果

await (async () => {

  for (let year of years) {
    for (let month of months) {
        for (let r of day_rng) {
           await download_file(year, month, r);
          }
    }
  }

})();

看起来应该有用。如何调用它?您应该使用
await
关键字调用它。噢,它正在被立即调用。尝试添加
await(async()=>{
。并非所有版本的节点都支持顶级的
await
,因此您可能需要进行一些重构。看起来它应该可以工作。如何调用它?您应该使用
await
关键字调用它。哦,正在立即调用它。请尝试添加
await(async()=>{
。并非所有版本的节点都支持
在顶层等待
,因此您可能需要进行一些重构。如何做出这样的承诺?类似这样:
返回新承诺((解析,拒绝)=>{//您的代码在这里……////如果需要,您可以传递任何您想要解析或拒绝的数据////当一切都完成并且成功解析()///如果错误拒绝()})
它已经返回了一个承诺,因为它是
async
。只需将
async
添加到函数中,它就会返回一个承诺(即使是没有价值的承诺)@user2740650嗯,没错,我没有看到他也将
download\u file
函数定义为异步函数,但是如果他在自调用函数之前添加了一个
wait
,该函数将使节点等待所有下载完成,对吗?如果有意义的话,不要等待每一个。因此我的回答是只添加
wait
如果他想让它等待:)。如果我的解释正确,应该是一个单词的修复。只是它调用了自调用函数,但没有等到返回的承诺被解析后再运行脚本的其余部分(该脚本将刚刚退出)。如何做出这样的承诺?类似这样:
返回新承诺((解析,拒绝)=>{//您的代码在这里……////如果需要,您可以传递任何您想要解析或拒绝的数据////当一切都完成并且成功解析()///如果错误拒绝()})
它已经返回了一个承诺,因为它是
async
。只需将
async
添加到函数中,它就会返回一个承诺(即使是没有价值的承诺)@user2740650嗯,没错,我没有看到他也将
download\u file
函数定义为异步函数,但是如果他在自调用函数之前添加了一个
wait
,该函数将使节点等待所有下载完成,对吗?如果有意义的话,不要等待每一个。因此我的回答是只添加
wait
如果他想让它等待:)。如果我的解释正确,应该是一个单词的修复。只是它调用了自调用函数,但没有等到返回的承诺得到解决,然后再运行脚本的其余部分(这将刚刚退出)。看起来您至少需要节点版本14.3,根据。看起来您至少需要节点版本14.3。