在用node编写定时任务时候,发现for循环只执行i=0,就不接着循环执行了,下面贴上代码:
exports.task = async function(ctx){
let { app } = ctx,
resultArr1 = [],//查询的数据库数据
resultArr2 = [];//查询的数据库数据
// 循环插入数据
for(let i = 0,len = resultArr1.length;i < len;i++){
...
console.log(111);
//数据库插入数据(异步)
await ...
for(let j = 0,errorArrLen = resultArr2 .length;j < errorArrLen;j++){
...
console.log(222);
//数据库插入数据(异步)
await ...
}
}
};
resultArr1 ,resultArr2的长度均大于1,执行时会发现111,,222只输出一遍,发现代码里面写了await异步的用法,后来找到了解决办法,代码如下:
exports.task = async function(ctx){
let { app } = ctx,
resultArr1 = [],//查询的数据库数据
resultArr2 = [];//查询的数据库数据
// 循环插入数据
for(let i = 0,len = resultArr1.length;i < len;i++){
...
console.log(111);
//数据库插入数据(异步)
await ...
for(let j = 0,errorArrLen = resultArr2 .length;j < errorArrLen;j++){
var arr = resultArr2 [j];
(async function(arr){
...
console.log(222);
//数据库插入数据(异步)
await ...
})(arr);
}
}
};
添加了这几行代码,问题就解决了,如果对这个错误有更好的解释或者解决办法,欢迎指出~~~

本文探讨了在使用Node.js编写定时任务时遇到的for循环仅执行一次的问题,通过分析发现与异步操作有关。文章详细介绍了如何通过调整代码结构,使用立即执行的异步函数来确保循环正常进行,避免同步代码阻塞。
85万+

被折叠的 条评论
为什么被折叠?



