これを尋ねる私の理論は少し弱いかもしれませんので、お気軽にお知らせください。
このコードは、Kango フレームワークを使用するブラウザ プラグインの一部です。基本的に、ユーザー ID であるランダムな文字列を生成するコードがあります。大きな ole JSON を設定する別の関数もあります。次のようになります。
function createJSON() {
data = {};
data["userID"] = generateID();
}
function generateID() {
kango.invokeAsync('kango.storage.getItem', 'userID', function(data) {
uid = data;
if (!uid) {
console.log("uid doesn't exist, creating uid!");
kango.invokeAsync('kango.storage.setItem', userID, function(data) { return data; });
} else {
console.log("uid found!: " + uid);
return uid;
}
return data;
});
}
kango.invokeAsync のドキュメントはこちらです。私の理解では、それは非同期の ajax 呼び出しのように機能し、その意味で、その値を data["userID"] に割り当てようとしているときにちょうど間に合わないということです。
最初に userID 呼び出しを実行してから、そのコールバック (ここでは用語が少しあいまいです) を使用して先に進み、データ配列に追加することで、これを解決できると思います。
それが正しい方法かどうかはわかりませんが。非同期関数の戻り値を取得するにはどうすればよいですか?