[英]Right way or method Do While If Condition set inside loop?
我想不出正確的方法來做到這一點:
我正在調用產品的外部API,並且收到響應,我想將這些產品添加到我的數據庫中,如果響應中包含next_page url循環,則再次循環,直到沒有next_page為止
這是我想出的:
var products = api.ProductsActive('GET', {includes: 'Images', limit: 1});
requestProducts = function(){
products.results.forEach(function(product){
var sameproduct = apiProducts.findOne({listing_id: product.listing_id});
if (sameproduct) {
console.log('found sameproduct');
return;
}
//Add userId to current product so we can assosicate products belong to "X" user
var productExtend = _.extend(product, {userId: Meteor.userId()});
apiProducts.insert(productExtend);
});
//If there is next page get the next page number and get products
var nextPage = products.pagination.next_page;
if (nextPage !== null) {
products = api.ProductsActive('GET', {includes: 'Images', page: nextPage, limit: 1});
console.log(products);
}
};
//loop at least once, and then if more pages found
do {
requestProducts();
}
while (products.pagination.next_page !== null);
哪一個似乎不正確,我不確定這是否是該功能的正確方法,我真的可以幫助您輸入! 請幫助我找出正確的方法!
請注意,javascript是異步的,因此您需要使用回調而不是do
來處理循環。 這樣做的原因是requestProducts可能使用了回調,並且javascript解釋器不會在運行下一行代碼之前“等待” requestProducts()
完成運行。
您尚未提供有關api工作原理的任何詳細信息,因此我不得不一概而論。
如果requestProducts()
使用參數作為回調(應該),請使用該參數重新運行自身:
var callback = function(err, result) {
if(products.pagination.next_page !== null) requestProducts(callback);
};
requestProducts(callback);
您將必須檢查api的文檔以檢查回調的定義方式,但這與上面的類似,如果有問題,則返回err
。
它是如何工作的,當調用requestProducts時,將觸發回調,如果回調不是最后一個要重復的頁面,直到..next_page == null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.