J'ai un tableau de 3 fonctions qui utilisent l'extraction de noeud pour extraire des données de 3 API différentes. Je voudrais invoquer seulement la deuxième et la troisième fonction si la première réponse de la fonction. Body contient 'rejeté'.Tableau de 3 fonctions de requête - comment appeler la deuxième fonction uniquement si la réponse de la première fonction contient une chaîne? - Noeud JS
Le problème auquel je suis confronté est que toutes les méthodes sont appelées avant que la réponse ne soit reçue du premier.
const buyersList = [
{ buyerName: 'ACME',
buyerPrice: '100',
buyerMethod: sellACME,
},
{ buyerName: 'ACME',
buyerPrice: '60',
buyerMethod: sellACME,
},
{ buyerName: 'ACME',
buyerPrice: '20',
buyerMethod: sellACME,
},
{ buyerName: 'ACME',
buyerPrice: '2',
buyerMethod: sellACME,
},
];
//fetch the data and parse
function sellACME(url) {
return fetch(url, { method: 'POST' })
.then(obj => parseResponse(obj))
.catch(err => console.log(' error', err));
}
//shift the first item in array and execute the method for first item.
const methods = {};
methods.exBuyerSell = (url) => {
const currBuyer = buyersList.shift();
return currBuyer.buyerMethod(url);
};
//loop through array.
module.exports = (url, res) => {
while (buyersList.length > 0) {
methods.exBuyerSell(url)
.then((buyerRes) => {
//if response.result is accepted, empty array, send response to client.
if (buyerRes.result === 'accepted') {
buyersList.length = 0;
res.json(buyerRes);
}
//if response.result is rejected, execute the next item in array.
if (buyerRes.result === 'rejected') {
methods.exBuyerSell(url);
}
return buyerRes;
});
}
};
La logique métier est que, si les données sont transmises au premier acheteur, les données est acceptée par cet acheteur et ne peut être présenté au deuxième acheteur.
setTimeout() n'est pas une option car la taille de la matrice peut atteindre 20 et chaque requête peut prendre jusqu'à 180 secondes.
J'ai essayé d'utiliser async/await et async.waterfall, mais j'ai toujours semblé avoir le même problème.
j'ai mal compris votre problème le premier temps. Veuillez vérifier ma réponse mise à jour. J'espère que cela aide. –