node js 里面都是异步执行的,在写一个for循环的时候,怎么一让当前这一次循环执行完之后,再进行下一次执行呢????
可以用闭包,不过你说的这种需求,一般都有其他方法实现的,比如async.map。你可以说的具体点。
尾递归,是最基础的一种,不过楼上的方法以及使用 ES6/7 解决方案才好
@qujinxiong 比如说一个for循环里面,当i=0的时候,执行一次,但是执行的内容还没有执行完,就会执行下一次循环,怎么样控制让当前这次循环执行完之后,再执行下一次循环呢???
@qujinxiong 你说的闭包,是指用foreach吗???
@DevinXian 尾递归???能不能说的详细一点,或者有没有什么参考文档之类的???谢谢
异步流程控制 用async模块实现 如果node版本是8.x 可以使用高级的async/await方式实现
问题应该是:异步流程控制中的顺序执行问题
三种方法: 1.基于回调 2.基于 Promise 3.async/await <-- 终极解决方法
下面代码楼主拿去玩玩
const asyncTask = (i, callback) => { let timer = setTimeout(() => { console.log(i) callback() }, Math.random() * 1000) } // promisify const asyncTaskP = i => new Promise(resolve => { asyncTask(i , resolve) }) /* 方法一 */ const method1 = n => { const next = i => { if(i >= n) return asyncTask(i, () => { i++ next(i) }) } next(0) } /* 方法二 */ const method2 = n => { let promise = asyncTaskP(0) for(let i = 1; i < n; i++){ promise = promise.then(() => asyncTaskP(i)) } promise.then() } /* 方法三 */ const method3 = async n => { for(let i = 0; i < n; i++){ await asyncTaskP(i) } } method1(5)
@quanpf2481 你能理解闭包就自然知道怎么解决这个问题了。
var arr = [1,2,3] for(var i=0;i<arr.length;i++){ var foo = function (i) { User.findOne({user_id:152+i},function (err, user) { if(err) console.log(err); console.log('ussserrr:'+i,user) }) }(i) }
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
可以用闭包,不过你说的这种需求,一般都有其他方法实现的,比如async.map。你可以说的具体点。
尾递归,是最基础的一种,不过楼上的方法以及使用 ES6/7 解决方案才好
@qujinxiong 比如说一个for循环里面,当i=0的时候,执行一次,但是执行的内容还没有执行完,就会执行下一次循环,怎么样控制让当前这次循环执行完之后,再执行下一次循环呢???
@qujinxiong 你说的闭包,是指用foreach吗???
@DevinXian 尾递归???能不能说的详细一点,或者有没有什么参考文档之类的???谢谢
异步流程控制 用async模块实现 如果node版本是8.x 可以使用高级的async/await方式实现
问题应该是:异步流程控制中的顺序执行问题
三种方法: 1.基于回调 2.基于 Promise 3.async/await <-- 终极解决方法
下面代码楼主拿去玩玩
@quanpf2481 你能理解闭包就自然知道怎么解决这个问题了。