Ho un problema di programmazione, che non so come risolvere. E mentre ho fornito un esempio del mio codice, sono interessato a una risposta concettuale su come risolvere questo problema.
In un evento tradeOffers
, chiamo una funzione per ottenere un elenco di offerte ed elaborarle una per una utilizzando async.forEachOfSeries
dal modulo Async.js. Tuttavia, se arriva una nuova offerta mentre le offerte in sospeso vengono ancora elaborate, la stessa offerta può essere elaborata più volte e anche restituire un errore non disponibile dell'offerta perché è già stato accettato. Questo è un problema perché la nuova offerta non viene valutata in modo efficace.
È possibile risolvere questo problema con una semplice callback o un flag vero / falso, oppure dovrei implementare una coda per le offerte? Se ho bisogno di usare una coda, vorrei evitare di usare SQL per memorizzare le offerte. O ho bisogno di un meccanismo di controllo più complesso per gestire nuovi eventi tradeOffers
quando l'elaborazione è già in atto?
Attualmente sto usando steam-tradeoffers e steam-user modulo.
Per spiegare meglio la mia situazione attuale, ecco il codice:
steam.on('tradeOffers', function(count) {
if (count > 1 && bot_working == true) {
processoffers();
}
});
function processoffers() {
if (bot_working) {
offers.getOffers({
get_received_offers: 1,
active_only: 1,
get_sent_offers: 0,
get_descriptions: 1,
time_historical_cutoff: Math.round(Date.now() / 1000),
language: "en_us"
}, function(error, body) {
if(error) return;
if(body.response.trade_offers_received){
async.forEachOfSeries(body.response.trade_offers_received, function(offer, key, cboffer) {
if (offer.trade_offer_state == 2){
//process offer
}
}, function (err) {
if (err) console.log(err.message);
console.log('Completed all incoming offers.');
}
); //function foreach
} //if trade tradeoffers
}); //if getoffers
};
};