Javascript 全局变量不会在回调函数之外保持更改

标签 javascript function cordova callback global-variables

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

对于一些我的全局变量不会在函数本身之外保持修改... 我创建了一个完全独立的函数并更改了一个全局变量,它工作正常。这让我很困惑。有什么想法吗?

附言。这是一个 Phonegap 3.0 项目,回调函数来自 IAP 插件。在这里找到https://github.com/j3k0/PhoneGap-InAppPurchase-iOS

storekit.load 是异步的!感谢您缩小范围。

2] -- 已加载 IAP:false 3] -- 已加载 IAP:真 4] -- 已加载 IAP:false 1] -- 已加载 IAP:true

我按顺序返回响应。但它不是 Ajax。它通过 Objective C,javascript 只处理响应,所以它可以通过 javascript 编辑

最佳答案

如建议的那样,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 Loaded: false

  • log 2 立即打印出来,因为它是一个非异步代码,var 的输出为 false,因为 'IAP_loaded' 还没有被修改

2] -- IAP Loaded: false

  • log 3 会立即打印出来,因为它是非异步代码,但您已手动将“IAP_loaded”的值更改为 true

3] -- IAP Loaded: true

  • 现在,在“storekit.load”执行完成后,日志 1 被打印出来,这里“IAP_loaded”的值手动设置为 true

1] -- IAP Loaded: true

请尽量提供完整的代码,如函数的调用方式等

关于Javascript 全局变量不会在回调函数之外保持更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19041845/

相关文章:

android - PhoneGap 应用中 <input type ="number"> 的 Android ICS 键盘行为不一致

javascript - 如何等待 Mongoose 搜索的返回?

javascript - 动态替换两个连字符 ("--") 为长破折号 ("—") ?

python - 将函数内部的变量传递给函数外部的变量

c - 如何从另一个函数释放分配的内存

android - 用于更高质量录音的 PhoneGap Android 插件?

javascript - 迭代列表收集器并且不显示某些值

JavaScript 请求 JSON 信息。返回错误结果

python - 为什么返回的字符串可以解释为 python 中的函数?

ios - 在企业 iOS 应用程序中,如何在现有配置文件过期后替换设备上的 *.mobileprovision 文件,但不重新签署 IPA?