我在我的应用程序中列出游戏。有些是付费的,有些是免费的,所以在上市期间,我正在调用一种方法来从Play商店获得价格并获得成功回调的响应。我的问题是我列出所有游戏后的成功处理程序设置价格,因此所有游戏都被列为免费。我的代码是
列出游戏
function render(res)
{
for (var i = 0; i < res.length; i++) {
var data=res[i];
if(data.product_id!='Free' && data.product_id!='')
{
getDetails(data.product_id);
}
else
{
price='Free';
}
console.log(price);
var gameOnScreen = "<li class='game-box showlist' data-tag='" + app_tag + "' >" +
"<div class='game-box-link' data-id='" + game.ID + "' data-orientation='" + orientation + "' data-ajax='false' data-url='" + link + "' data-transition='none'>" +
"<img src='" + thumb + "' class='game-thumb'>" +price+
"</div></li>";
}
}
}
获取详细信息
function getDetails(productlist)
{
inappbilling.getProductDetails(successHandler2, errorHandler, productlist);
}
successHandler2
function successHandler2 (result)
{
price= result[0].price;
console.log(price);
}
在图片中,您可以看到列出所有游戏后的价格。
请帮帮我。非常感谢您的帮助。
答案 0 :(得分:2)
我只是将您的代码重写为递归调用:
function render(res)
{
var length = res.length;
var i=0;
var price;
function display(){
var gameOnScreen = "<li class='game-box showlist' data-tag='" + app_tag + "' >" +
"<div class='game-box-link' data-id='" + game.ID + "' data-orientation='" + orientation + "' data-ajax='false' data-url='" + link + "' data-transition='none'>" +
"<img src='" + thumb + "' class='game-thumb'>" +price+
"</div></li>";
i++;//incrementing to nextitem, but not triggering next iteration as a loop.
};
function getDetails()
{
if(res[i].product_id!='Free' && res[i].product_id!='')
{
inappbilling.getProductDetails(successHandler2, errorHandler, res[i].product_id);
}
else
{
price='Free';
display();//displaying item
}
};
function successHandler2 (result)
{
price= result[0].price;
console.log(price);
display();//displaying current item
if(i<length){
getDetails();//after getting current item's price go for next
}
};
getDetails();//initial call
}
完成当前项目后,这将转到下一个项目。
另请注意,我没有照顾errorHandler
答案 1 :(得分:0)
像这样添加回复getDetails()
:
function getDetails(productlist, callback)
{
inappbilling.getProductDetails(function successHandler2(result) {
callback(result[0].price);
}, errorHandler, productlist);
}
现在,您可以使用拨打getDetails()
的费用:
getDetails(res.product_id, function callback(price) {
// now you can update the DOM to show the actual price.
});
但是,我只会在检索到价格后在列表中显示一个游戏(将其添加到回调中的DOM)。否则它将在短时间内显示为免费。
答案 2 :(得分:0)
首先,确保呈现所有HTML,使用产品ID作为类/ ID或HTML属性来区分不同的产品。
<li class='game-box showlist' data-productid='productId' >
...
</li>
然后,调用getProductDetails
,传入指向产品的HTML选择器。您可以在成功回调返回后使用它来更新HTML,如下所示:
function getDetails(productlist, selector)
{
inappbilling.getProductDetails(function(result) {
var price= result[0].price;
$(selector).html(price);
}, errorHandler, productlist);
}
请注意,您可能希望使用其他占位符,而不是将默认价格设置为“免费”。