簡體   English   中英

正確的方法或方法如果條件在循環內設置了While嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM