循环中使用同步请求
Posted ericzlin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环中使用同步请求相关的知识,希望对你有一定的参考价值。
-
循环下的异步
let inner = [‘in1‘,‘in2‘,‘in3‘]; function runTask(){ console.log(‘任务开始‘) for (let index = 0; index < inner.length; index++) { const i = inner[index]; setTimeout(() => { console.log(`inner里的${i}完成`) }, 100); } console.log(‘任务完成‘) } runTask() /* 任务开始 任务完成 inner里的in1完成 inner里的in2完成 inner里的in3完成 */
-
使用
for
循环同步let inner = [‘in1‘,‘in2‘,‘in3‘]; async function runTask(){ const timeout = (i)=>{ return new Promise(res=>{ setTimeout(() => { console.log(`inner里的${i}完成`) res() }, 100); }) } console.log(‘任务开始‘) for (let index = 0; index < inner.length; index++) { const i = inner[index]; await timeout(i) } console.log(‘任务完成‘) } runTask() /* 任务开始 inner里的in1完成 inner里的in2完成 inner里的in3完成 任务完成 */
-
forEach
使用await无效:由于在foreach
中已经完成了一次对于循环的封装,当 使用foreach
时其实也就相当于调用了一个封装了while
或者for
循环的函数,这个函数本身并没有使用async/await来处理异步,所以使用时在回调函数里面加上async/await
是没有作用的let inner = [‘in1‘,‘in2‘,‘in3‘]; function runTask(){ const timeout = (i)=>{ return new Promise(res=>{ setTimeout(() => { console.log(`inner里的${i}完成`) res() }, 100); }) } console.log(‘任务开始‘) inner.forEach(async (i)=>{ await timeout(i) }) console.log(‘任务完成‘) } runTask() /* 务开始 任务完成 inner里的in1完成 inner里的in2完成 inner里的in3完成 */
-
多层循环下使用同步
let outer = [‘out1‘,‘out2‘,‘out3‘],inner = [‘in1‘,‘in2‘,‘in3‘]; async function runTask(){ const timeout1 = (outer) => { return new Promise(res => { setTimeout(() => { //console.log(out) res() }, 1000); }) } const timeout2 = (inner)=>{ return new Promise(res=>{ setTimeout(()=>{ //console.log(inner) res() },500) }) } console.log(‘任务开始‘) for (let index = 0; index < outer.length; index++) { const o = outer[index]; for (let index = 0; index < inner.length; index++) { const i = inner[index]; await timeout1(i) console.log(`inner里的${i}完成`) } await timeout2(o) console.log(`outer里的${o}完成`) } console.log(‘任务完成‘) } runTask() /* 任务开始 inner里的in1完成 inner里的in2完成 inner里的in3完成 outer里的out1完成 inner里的in1完成 inner里的in2完成 inner里的in3完成 outer里的out2完成 inner里的in1完成 inner里的in2完成 inner里的in3完成 outer里的out3完成 任务完成 */
以上是关于循环中使用同步请求的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围
[工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet & FRHICommandListImmediate calls(代码片段