标记继续声明; for循环

continue connloop; 抛出Syntax Error: Unsyntactic continue

如果我改变continue connloop; continue; ,它会运行(但是它不会在外部循环上执行,而是在内部循环上执行)

为什么会发生这种情况,是不是在nodejs / ecma6中被弃用或违法?

请不要推荐我使用函数调用而不是标签。

 redisSubscriber.on("message", function(channel, event){ event = JSON.parse(event); const eventPayload = JSON.stringify(event.payload); connloop: for(let conn in connections){ conn = connections[conn]; redisClient.SMEMBERS('connection/'+conn.id+'/subscriptions', (err, subscriptions)=>{ let intersectedTags = []; if(event.address.tags.length > 0 && subscriptions.length > 0){ for(let tag in subscriptions){ tag = subscriptions[tag]; for(let _tag in event.address.tags){ _tag = event.address.tags[_tag]; if(tag == _tag) intersectedTags.push(tag); } } } let exclusive = false; for(let userId in event.address.include){ userId = event.address.include[userId]; if(userId == conn.userId){ exclusive = true; break; } } if(intersectedTags.length > 0 || exclusive){ if(event.address.exclude){ for(let exclude in event.address.exclude){ exclude = event.address.exclude[exclude]; if(exclude == conn.userId){ continue connloop; } } } const browserEvent = {tags: intersectedTags, notification: eventPayload, exclusive}; conn.write(JSON.stringify(browserEvent)); } }) } }); 

使用继续标签closuresfunction是没有语法的,因为与继续声明和标签connloop的差异范围:

 // continue statement in anonymous function redisClient.SMEMBERS('connection/'+conn.id+'/subscriptions', (err, subscriptions)=>{ 

跟着代码应该是一样的范围:

 redisSubscriber.on("message", function(channel, event){ connloop: for(let conn in connections){ // more codes ... for(let exclude in event.address.exclude){ exclude = event.address.exclude[exclude]; if(exclude == conn.userId){ continue connloop; } } } }); 

continue在function边界上无效。 你把continue放在一个函数内,试图跳到函数外面的一个位置。

因为redisClient.SMEMBERS很可能是一个asynchronous操作,所以在这里continue是没有意义的,所以循环已经在调用callback的时候终止了。