Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 重试未成功的异步操作-如何避免EsLint中的循环内部等待(循环中无等待)?_Javascript_Node.js_Mongodb_Asynchronous_Async Await - Fatal编程技术网

Javascript 重试未成功的异步操作-如何避免EsLint中的循环内部等待(循环中无等待)?

Javascript 重试未成功的异步操作-如何避免EsLint中的循环内部等待(循环中无等待)?,javascript,node.js,mongodb,asynchronous,async-await,Javascript,Node.js,Mongodb,Asynchronous,Async Await,我有一组来自JSON的教程,并将它们全部导入数据库 我使用for循环是因为我想将所有错误浏览提取到另一个文件中,这样我就可以修复它并在以后重新导入 这是我的代码,它按预期工作 常量importData=async()=>{ const tours=JSON.parse( 等待fs.readFile(path.join(uu dirname,'data','final.json'),'utf8') ); 常量errorTours=[]; 对于(设i=0;itour .创建(巡演) .catch(

我有一组来自JSON的教程,并将它们全部导入数据库

我使用for循环是因为我想将所有错误浏览提取到另一个文件中,这样我就可以修复它并在以后重新导入

这是我的代码,它按预期工作


常量importData=async()=>{
const tours=JSON.parse(
等待fs.readFile(path.join(uu dirname,'data','final.json'),'utf8')
);
常量errorTours=[];
对于(设i=0;i<0.length;i+=1){
const-tour=tours[parseInt(i,10)];
试一试{
等待旅游。创建(旅游);
}捕获(e){
推送({tour,error:e});
}
}
等待fs.writeFile('errorTour.json',json.stringify(errorTours));
log('finished!!!:tada:');
}
但是我有

对iterable的每个元素执行操作是一项常见任务。然而,作为每个操作的一部分执行等待表明程序没有充分利用异步/等待的并行化优势

通常,应该重构代码,一次创建所有承诺,然后使用Promise.all()访问结果。否则,在前一个操作完成之前,不会启动每个后续操作

也许对我来说更合适,对吧

我是JS新手,对如何将我的异步等待代码更改为Promise代码并使用Promise.allSettled感到困惑

或者有没有更好的方法来重试失败的异步操作

你们能告诉我这个案子的方向吗


谢谢,

这是我的努力,谢谢@Atlante Avila和

const=[];
对于(设i=0;i<0.length;i+=1){
const-tour=tours[parseInt(i,10)];
推(
Tour.create(Tour.catch)(e)=>{
推送({tour,error:e});
})
);
}
等待承诺。所有(承诺);
旧代码:花费5466.0252829966毫秒

新代码:耗时1682.5688519999385毫秒

看起来好多了,这个怎么样

const TourPromises=tours.map(tour=>tour
.创建(巡演)
.catch(e=>errorTours.push({tour,error:e}))
)
等待承诺。所有(承诺);

祝你好运…

你能把你的承诺推送到一个数组,然后返回
承诺。所有([promises])
?你为什么要调用
parseInt(i,10)
i
已经是一个整数,正如您刚才声明并自己分配的那样。@ThinhNV-在这种情况下,这是一个虚假的警告,导致您添加不必要的代码。看见由于
i
直接来自您的代码,因此根本没有注射风险。您必须了解警告的含义,以及它是否适用于您的代码。如果没有,那么您可以关闭该特定警告,或者在代码的这一部分插入一条注释,告诉它忽略该警告。如果不了解这些警告的实际含义以及它们是否真的相关,您就不能/不应该使用这些工具。@ThinhNV-正如您所知,这与您的原始代码的工作原理并不完全相同。这将并行运行所有异步操作。您的原始代码按顺序(一个接一个)运行它们。并行可能会更快地获得结果,但如果阵列更大,则可能会因为同时有太多请求(例如目标主机的速率限制或更大的内存使用)而导致问题。