На всякий случай, если у кого-то еще возникла такая же проблема, я выяснил, где это пошло не так.
согласно моему сообщению Icao, я определил в своем прото-коде, что данные должны быть строкой. Но когда я вызываю метод setValue, я передаю объект JSON вместо этого строкового значения. поэтому, когда я использую
protobuf["Icao"].create({data:value})
, значение не является строкой. это была проблема. согласно protobuf js документации , всегда полезно проверять полезную нагрузку перед использованием метода create it. вот так.
// Exemplary payload
var payload = { awesomeField: "AwesomeString" };
// Verify the payload if necessary (i.e. when possibly incomplete or invalid)
var errMsg = AwesomeMessage.verify(payload);
if (errMsg)
throw Error(errMsg);
// Create a new message
var message = AwesomeMessage.create(payload); // or use .fromObject if conversion is necessary
// Encode a message to an Uint8Array (browser) or Buffer (node)
var buffer = AwesomeMessage.encode(message).finish();
// ... do something with buffer
Это вызвало у меня ошибку, сказав, что данные должны быть String. это была проблема.
А также, поскольку я использовал ключевое слово repeated
в моем IcaoContainer container.entries
должен быть массивом.