Je veux savoir comment utiliser setImmediate avec async await et gérer correctement les erreurs. J'ai écrit le code suivant. Mais je ne suis pas sûr qu'il respecte les meilleures pratiques.
Il y a un itinéraire dans mon application express
var userhelper = {};
const fs = require('fs'),
path = require('path'),
filePath = path.join(__dirname, './input_user_story_12.txt');
const { promisify } = require('util')
const readFile = promisify(fs.readFile);
userhelper.getParseInVoiceList = async function() {
return new Promise( async (resolve, reject) => {
try {
setImmediate(async function() {
try {
const contents = await readFile(filePath, 'UTF-8');
resolve(contents);
} catch (error) {
reject(error);
}
});
} catch (error) {
reject(error);
}
});
}
module.exports = userhelper;
Le code de la classe userhelper
router.get('/parseinvoice', async (req, res, next) => {
try {
const parsedInvoiceResponse = await userhelper.getParseInVoiceList();
res.json({parsedInvoiceResponse})
} catch (error) {
res.json({});
}
});
Bien que j'obtienne la réponse. Je ne suis pas sûr de la partie setImmediate , si les multiples try catch sont nécessaires. Existe-t-il un moyen efficace d'écrire le code ci-dessous?.
3 Réponses :
Pourquoi n'utilisez-vous pas seulement?
userhelper.getParseInVoiceList = async function() {
return await readFile(filePath, 'UTF-8');
}
Je veux exécuter ce code dans la prochaine itération de la boucle d'événements. C'est pourquoi je l'utilise.
const res = await setImmediate(()=>{
return readFile(filePath, 'UTF-8');
})
En développant la réponse de @Dan D. , vous pouvez attendre la résolution d'un setImmediate asynchrone avant d'appeler l'asynchrone promisifié readFile , mais je ne sais pas pourquoi vous auriez besoin de le faire sans plus de contexte.
userhelper.getParseInVoiceList = async function() {
await new Promise((resolve) => setImmediate(() => resolve()));
return await readFile(filePath, 'UTF-8');
}