2016-12-20 10 views
-2

ProtoBufのロード関数内で変数IMLoginReqに値を代入したいのですが、うまくいきません。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を使用してリクエスト定義を取得していますので、リクエストは元々自分で定義されています –

答えて

1

load()のメソッドは非同期です。したがって、最後のconsole.logはロードが完了する前に発生します。これを手続き型ロジックとして扱うのではなく、あなたが持っている成功メソッドの中でIMLoginReqを使うべきです。

+0

これはもちろんload()がjQueryメソッドであることを前提としていますが、 )は依然として非同期であるように見えます。 – Taplar

+0

これは、そのように起こったことに対する答えです。非常に感謝します。 –

0

ロードされる前に呼び出すためです。あなたは成功のようなコールバック関数を持っていなければなりません。 また、コールバックを省略して約束をすることもできます。

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

あなたのインスピレーションをありがとう –

関連する問題