2016-09-16 7 views
2

나는이 문제에 대한 답을 찾기 위해 머리를 부딪쳤다. Shopify API에 Node.js 모듈을 microapps까지 사용하고 있습니다. JSON 객체에는 제품 ID와 skus 목록이 포함되어있어 업데이트해야하므로 파일을 반복하고 API를 호출하는 함수를 호출합니다. Shopify의 API는 호출을 제한하고 값이 남아있는 응답 헤더를 보냅니다. 이 노드 모듈은 한계와 사용법을 포함하는 객체를 제공합니다. 내 질문은 제한에 도달 할 때 setTimeout 또는 유사하게 할 수있는 방법 아래의 코드를 기반으로합니다. 첫 번째 전화를하면 그 한계는 다음과 같이 객체를 반환합니다 해봤 다 같은 한계를 존중하지 않고Microapps Node.js 모듈을 사용하여 Shopify의 API 호출 제한을 처리하는 방법

다음
{ 
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)); 
} 

는 내가 구현해야 알 남아있는 사용량이 낮은지를 확인하기위한 일종의 콜백입니다. 그런 다음 다시 호출하기 전에 몇 초 기다립니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

2
내가 예를 https://github.com/lpinca/valvelet에 대한 요청을 만들 shopify-api-node ( Shopify.prototype.request)에 의해 사용되는 함수의 실행 속도를 제한하기 위해 뭔가를 사용하는 것이

.

아래 코드는 테스트되지 않았지만 제대로 작동해야합니다. 초당 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); 
}); 
0

Shopify 코드를 보면 github 저장소에 CLI가 있습니다. 해당 CLI는 한계를 처리합니다. Shopify가 코드를보고 이러한 한계를 다루는 방법을 빠르게 배울 수 있습니다.

코드가 Ruby에 있기 때문에 매우 쉽게 소화 할 수 있습니다. 숙련 된 JS 프로그래머는이 코드를 기반으로 한 제한을 다루는 방법을 보거나 Ruby에서 추상화하는 데 몇 분 이상 걸리지 않습니다.

제 제안은 Shopify 코드를 읽고 동일한 패턴과 일치하도록 JS 코드를 변형 한 다음 시도하는 것입니다.