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编辑
答案 0 :(得分: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',因此
4] - IAP已加载:false
2] - IAP已加载:false
3] - IAP已加载:是
1] - IAP已加载:是
请尝试向我们提供完整的代码,如调用函数等。
答案 1 :(得分:0)
与任何异步代码一样,IAP_loaded
确实已更改为true,但不会在底部的代码执行之前。要检查这一点,请在4:
(function check_IAP(){
console.log("5] -- IAP Loaded: "+IAP_loaded);
if (!IAP_loaded) {
setTimeout(check_IAP,500);
}
)();