3
var IAP_loaded = false; // Global Scope

var IAP_onReady = function(){
     storekit.load(IAP_list, function (products, invalidIds) {
            IAP_loaded = true;
            console.log("1] -- IAP Loaded: "+IAP_loaded); // Outputs true
     });
     console.log("2] -- IAP Loaded: "+IAP_loaded); // Outputs false
     IAP_loaded = true;
     console.log("3] -- IAP Loaded: "+IAP_loaded); // Outputs true
};

console.log("4] -- IAP Loaded: "+IAP_loaded); // Outputs false

一部のグローバル変数は、関数自体の外で変更されたままではありません...完全に別の関数を作成し、グローバル変数を変更したところ、正常に動作しました。このただの心は私を困惑させます。何かご意見は?

PS。これは Phonegap 3.0 プロジェクトで、コールバック関数は IAP プラグインからのものです。ここにあります https://github.com/j3k0/PhoneGap-InAppPurchase-iOS

storekit.load は非同期です! 絞っていただきありがとうございます。

2] -- IAP Loaded: false 3] -- IAP Loaded: true 4] -- IAP Loaded: false 1] -- IAP Loaded: true

という順番で返事が返ってきます。しかし、それは Ajax ではありません。それはObjective Cを介しており、javascriptは応答を処理するだけなので、javascriptを介して編集できます

4

2 に答える 2

1

示唆されているように、IAP (アプリ内購入) は Ajax と同様に機能します。実際、ほとんどの phonegap プラグインは同じパターンに従います。

まず、プラグインの仕組みを見てみましょう - JS からの呼び出しが Obj C ファイルに送信されます - Obj C が必要な計算を行っている間、他の JS コードが同時に実行されます - Obj C が計算を完了した後、コールバックを介して出力が JS に送り返されます

では、あなたが提供したコードを見てみましょう

var IAP_loaded = false; // Global Scope

var IAP_onReady = function(){
     storekit.load(IAP_list, function (products, invalidIds) {
            IAP_loaded = true;
            console.log("1] -- IAP Loaded: "+IAP_loaded); // Outputs true
     });
     console.log("2] -- IAP Loaded: "+IAP_loaded); // Outputs false
     IAP_loaded = true;
     console.log("3] -- IAP Loaded: "+IAP_loaded); // Outputs true
};

console.log("4] -- IAP Loaded: "+IAP_loaded); // Outputs false

注 - 以下のログとして console.log を参照しています

今javascriptがファイルを実行するのはこの順序です

どこかから「IAP_onReady」を呼び出す必要があるため、

  • log 4 は、「IAP_loaded」の出力が false の非非同期コードであるため、即座に出力されます。「IAP_loaded」を false として初期化しました

4] -- IAP ロード: false

  • log 2 は、「IAP_loaded」がまだ変更されていないため、var の出力が false の非非同期コードであるため、即座に出力されます。

2] -- IAP ロード: false

  • log 3 は非非同期コードであるためすぐに出力されますが、「IAP_loaded」の値を手動で true に変更しました

3] -- IAP ロード: true

  • 「storekit.load」の実行が完了すると、ログ 1 が出力されます。ここでは、「IAP_loaded」の値を手動で true に設定します。

1] -- IAP ロード: true

関数の呼び出し方法など、完全なコードを提供してください。

于 2013-10-11T14:57:34.703 に答える