如何在回调函数外访问shopify-node-api请求的结果

时间:2017-06-13 00:13:55

标签: javascript arrays node.js shopify

我正在构建Shopify应用程序,并且在使用shopify-node-api模块时遇到了问题。这是我正在使用的代码:

collectProducts: ['storedProducts', function(results, callback) {

  const collected_products = results.storedProducts;

  for (var i = 0; i < collected_products.length; i++) {

    Shopify.post('/admin/collects.json', {
      "collect": {
        "product_id": collected_products[i].product_id,
        "collection_id": process.env.DAILY_COLLECTION
      }
    }, function(err, data, headers){
      collected_products[i].collect_id = data.collect.id;
    });
  }

  callback(null, collected_products);
}],

为清楚起见,collectProducts项是异步函数的一部分。我正在尝试从对请求的响应中收集收集ID,并更新collect_id中的collected_products值。问题是我似乎无法从post请求的回调函数中访问collected_products数组。有没有办法1.简单地为for循环的每次迭代返回该值或2.从该回调函数中访问collected_products数组以存储这些值?

提前感谢您的任何答案!

1 个答案:

答案 0 :(得分:1)

对于后来遇到这种情况的人,我能够通过使用我已经用于应用程序其他部分的异步模块来解决问题。 mapSeries函数完成了我想要做的事情。

// Get storedProducts from previous async function
async.mapSeries(results.storedProducts, function(product, cb) {
  // Adding the new collect here
  Shopify.post('/admin/collects.json', {
    "collect": {
      "product_id": product.product_id,
      "collection_id": process.env.DAILY_COLLECTION
    }
  }, function(err, data, headers) {
      // Update the product object with the Shopify-generated collect id
      product.collect_id = data.collect.id
      // Add the result to the mapSeries array
      cb(err, product);
    });
  }, function(err, results) {
    // Pass the now updated mapSeries array to the next async function
    callback(err, results);
});