Javascript 从成功处理程序获取结果
我正在我的应用程序中列出这个游戏。有些是付费的,有些是免费的,所以在列表中我调用了一个方法从play store获取价格,并在成功回调中获得响应。我的问题是我的成功处理程序在列出所有游戏后设置价格,所以所有游戏都列为免费。我的代码是 上市游戏Javascript 从成功处理程序获取结果,javascript,Javascript,我正在我的应用程序中列出这个游戏。有些是付费的,有些是免费的,所以在列表中我调用了一个方法从play store获取价格,并在成功回调中获得响应。我的问题是我的成功处理程序在列出所有游戏后设置价格,所以所有游戏都列为免费。我的代码是 上市游戏 function render(res) { for (var i = 0; i < res.length; i++) { var data=res[i]; if(data.product_id!='Free'
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>";
}
}
}
成功者2
function successHandler2 (result)
{
price= result[0].price;
console.log(price);
}
在图像中,您可以看到在列出所有游戏后,价格即将上涨。向
getDetails()
添加回调,如下所示:
function getDetails(productlist, callback)
{
inappbilling.getProductDetails(function successHandler2(result) {
callback(result[0].price);
}, errorHandler, productlist);
}
function getDetails(productlist, selector)
{
inappbilling.getProductDetails(function(result) {
var price= result[0].price;
$(selector).html(price);
}, errorHandler, productlist);
}
现在,您可以使用调用getDetails()
的价格:
但是,我只会在检索到价格后在列表中显示一个游戏(将其添加到回调中的DOM中)。否则,它将在短时间内显示为空闲。我只是将您的代码重写为递归调用:
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
}
函数渲染(res)
{
var-length=res.length;
var i=0;
var价格;
函数显示(){
var gameOnScreen=“”+
"" +
“+价格+
“ ”;
i++;//递增到nextitem,但不作为循环触发下一次迭代。
};
函数getDetails()
{
if(res[i].product_id!='Free'&&res[i].product_id!='')
{
inappbilling.getProductDetails(successHandler2,errorHandler,res[i].product\u id);
}
其他的
{
价格‘免费’;
display();//显示项
}
};
函数successHandler2(结果)
{
价格=结果[0]。价格;
控制台日志(价格);
display();//显示当前项
如果(i首先,请确保呈现所有HTML,使用产品ID作为类/ID或HTML属性来区分不同的产品
<li class='game-box showlist' data-productid='productId' >
...
</li>
请注意,您可能需要使用另一个占位符,而不是将默认价格设置为“free”。我认为您需要进行回调。在哪里进行回调?请显示getProductDetails,我需要检查您如何返回数据。我认为这不会解决我的问题。对于render()的循环
在得到来自getDetails()的响应之前已完成。
是的,这就是为什么我写道我宁愿在收到价格后再展示游戏。我的解决方案只是说明了如何从getDetails()中获取价格值函数。这有点低效。你最好将异步流抽象为类似的东西,这样你就可以利用并行处理,更快地得到结果。
<li class='game-box showlist' data-productid='productId' >
...
</li>
function getDetails(productlist, selector)
{
inappbilling.getProductDetails(function(result) {
var price= result[0].price;
$(selector).html(price);
}, errorHandler, productlist);
}