Add some async to the queries

main
Ibraheem Saleh 10 months ago
parent cc02ef4363
commit d9839f21ea

@ -39,7 +39,7 @@ const headers = {
'TE': 'trailers' 'TE': 'trailers'
}; };
const skuIds = ["6614151","6616096","6617487","6614119","6614120","6616095","6616092","6616096","6614122","6616093","6616090","6616091","6615930","6615929","6615931"] const skuIds = ["6614151","6616096","6617487","6614119","6614120","6616095","6616092","6614122","6616093","6616090","6616091","6615930","6615929","6615931"]
const queries = skuIds.map(skuId => ({ const queries = skuIds.map(skuId => ({
skuId, skuId,
@ -151,42 +151,52 @@ async function fetchGraphQL(zip, store, query) {
async function pollStore(zip, store) { async function pollStore(zip, store) {
console.log(`Starting poll for zip ${zip} and store ${store}...`); console.log(`Starting poll for zip ${zip} and store ${store}...`);
const batchSize = 5;
while (!found) { while (!found) {
for (const { skuId, query } of queries) { const queryBatches = [];
const data = await fetchGraphQL(zip, store, query); for (let i = 0; i < queries.length; i += batchSize) {
if ( queryBatches.push(queries.slice(i, i + batchSize));
data && }
data.data &&
data.data.productBySkuId && for (const batch of queryBatches) {
data.data.productBySkuId.fulfillmentOptions && const fetchPromises = batch.map(({ skuId, query }) => fetchGraphQL(zip, store, query).then(data => ({ skuId, data })));
data.data.productBySkuId.fulfillmentOptions.buttonStates && const results = await Promise.all(fetchPromises);
data.data.productBySkuId.fulfillmentOptions.buttonStates.length > 0
) { for (const { skuId, data } of results) {
const buttonState = data.data.productBySkuId.fulfillmentOptions.buttonStates[0].buttonState; if (
console.log(`skuId: ${skuId} Store: ${store} Ship to: ${zip} -> buttonState: ${buttonState}`); data &&
if (buttonState !== "SOLD_OUT") { data.data &&
found = true; data.data.productBySkuId &&
const productUrl = getProductUrl(skuId) data.data.productBySkuId.fulfillmentOptions &&
console.log(productUrl) data.data.productBySkuId.fulfillmentOptions.buttonStates &&
winningResult = { skuId, zip, store, buttonState, data }; data.data.productBySkuId.fulfillmentOptions.buttonStates.length > 0
const openPromise = open(productUrl); ) {
const addToCartPromise = addToCart(productUrl); const buttonState = data.data.productBySkuId.fulfillmentOptions.buttonStates[0].buttonState;
await open('./alarm.wav'); console.log(`skuId: ${skuId} Store: ${store} Ship to: ${zip} -> buttonState: ${buttonState}`);
await addToCartPromise if (buttonState !== "SOLD_OUT") {
return winningResult; found = true;
const productUrl = getProductUrl(skuId);
console.log(productUrl);
winningResult = { skuId, zip, store, buttonState, data };
const openPromise = open(productUrl);
const addToCartPromise = addToCart(productUrl);
await open('./alarm.wav');
await addToCartPromise;
return winningResult;
}
} else {
console.log(`Incomplete data for zip ${zip}, store ${store}.`);
}
lines++;
if (lines > 30) {
lines = 0;
process.stdout.write('\x1B[3J\x1B[2J\x1B[H');
}
await new Promise(resolve => setTimeout(resolve, 500));
} }
} else {
console.log(`Incomplete data for zip ${zip}, store ${store}.`);
}
lines++
if(lines > 30) {
lines = 0;
process.stdout.write('\x1B[3J\x1B[2J\x1B[H');
}
await new Promise(resolve => setTimeout(resolve, 500));
} }
} }
return null; return null;
} }
async function runAllPollers() { async function runAllPollers() {

Loading…
Cancel
Save