2016-12-20 8 views
-2

Я хотел бы присвоить значение переменной IMLoginReq внутри функции загрузки ProtoBuf, но она не работает, может ли кто-нибудь помочь?Невозможно присвоить значение переменной по ссылке в Javascript

var IMLoginReq; 
protobuf.load("./pb/IM.Login.proto", (err, root) => { 
    // Obtain a message type 
    IMLoginReq = root.lookup("IM.Login.IMLoginReq"); 
    console.log(IMLoginReq);//<== is not undefined 
}); 
console.log(IMLoginReq);//<== is undefined 
+0

Может ли я знать, что библиотека у используется, чтобы сделать запрос? –

+0

Я использую dcodeIO.protobuf для извлечения моего определения запроса proto, поэтому запрос изначально определяется мной –

ответ

1

Метод load() является асинхронным. Таким образом, console.log в конце будет происходить до завершения загрузки. Вместо того, чтобы пытаться рассматривать это как процедурную логику, а это не так, вместо этого вы должны использовать IMLoginReq внутри метода успеха, который у вас есть.

+0

Это, конечно, предполагает, что load() - это метод jQuery, хотя по вашей проблеме, даже если это не так, нагрузка () по-прежнему кажется асинхронным. – Taplar

+0

Это ответ, как это произошло, очень цените. –

0

Это потому, что вы пытаетесь вызвать его перед его загрузкой. У вас должна быть функция обратного вызова, такая как успех, так что она будет там. Вы можете также использовать обещание, опуская обратный вызов:

protobuf.load("awesome.proto") 
    .then(function(root) { 
     ... 
    }); 
+0

Спасибо за ваше вдохновение –