我一直在努力寻找答案,我只是想不通。我正在通过microapps为Shopify API使用Node.js模块。我有一个JSON对象,其中包含我需要更新的产品ID和skus的列表,因此我遍历文件并调用了一个调用api的函数。Shopify的API会限制对其的调用,并发送剩余值的响应标头。该节点模块提供了一个包含限制和用法的对象。我的问题是基于以下代码,当我达到极限时,如何在setTimeout或类似时间可以做到这一点。首次调用后,它将返回极限对象,如下所示:
{
remaining: 30,
current: 10,
max: 40
}
由于尝试的所有操作均失败,这是我不遵守限制的情况:
const products = JSON.parse(fs.readFileSync('./skus.json','utf8'));
for(var i = 0;i < products.length; i++) {
updateProduct(products[i]);
}
function updateProduct(product){
shopify.productVariant.update(variant.id, { sku: variant.sku })
.then(result => cb(shopify.callLimits.remaining))
.catch(err => console.error(err.statusMessage));
}
我知道我需要实现某种回调以检查剩余使用率是否较低,然后等待几秒钟再调用一次。任何帮助将不胜感激。
我会使用某些方法来限制shopify-api-node
(Shopify.prototype.request
)用于创建请求的函数的执行速度,例如https://github.com/lpinca/valvelet。
以下代码未经测试,但可以正常工作。它应该遵守每秒2个呼叫的限制。
var Shopify = require('shopify-api-node');
var valvelet = require('valvelet');
var products = require('./skus');
var shopify = new Shopify({
shopName: 'your-shop-name',
apiKey: 'your-api-key',
password: 'your-app-password'
});
// Prevent the private shopify.request method from being called more than twice per second.
shopify.request = valvelet(shopify.request, 2, 1000);
var promises = products.map(function (product) {
return shopify.productVariant.update(product.id, { sku: product.sku });
});
Promise.all(promises).then(function (values) {
// Do something with the responses.
}).catch(function (err) {
console.error(err.stack);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句