用nodejs写的gRPC流式服务端,在循环体外部创建了proto消息体,在循环内部set值,并write回客户端,结果客户端收到的每个包内容都相同。
看到这结果,也能猜到个大概了,必定和node的异步机制有关,循环结束后才真正调用之前的write函数,导致每次发送的都是最终的proto消息。
想起node闭包的一个禁忌:不要在闭包中使用外部的循环变量或后续会发生变化的变量
探讨使用NodeJS实现gRPC流式服务时遇到的问题,因闭包中使用外部循环变量导致每次发送的都是最终的proto消息,揭示异步机制下的常见错误。
用nodejs写的gRPC流式服务端,在循环体外部创建了proto消息体,在循环内部set值,并write回客户端,结果客户端收到的每个包内容都相同。
看到这结果,也能猜到个大概了,必定和node的异步机制有关,循环结束后才真正调用之前的write函数,导致每次发送的都是最终的proto消息。
想起node闭包的一个禁忌:不要在闭包中使用外部的循环变量或后续会发生变化的变量
879
747

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