Невозможно присвоить значение переменной по ссылке в Javascript

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

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

2 ответа

Решение

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

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

protobuf.load("awesome.proto")
    .then(function(root) {
       ...
    });
Другие вопросы по тегам