正确的方法或方法在循环内设置条件时做

Right way or method Do While If Condition set inside loop?

本文关键字:方法 条件 设置 循环      更新时间:2023-09-26

我找不到正确的方法:

正在为产品调用外部 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