5
votes

Utilisation de l'attente asynchrone avec setImmediate

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?.


0 commentaires

3 Réponses :


0
votes

Pourquoi n'utilisez-vous pas seulement?

userhelper.getParseInVoiceList = async function() {
    return await readFile(filePath, 'UTF-8');
}


1 commentaires

Je veux exécuter ce code dans la prochaine itération de la boucle d'événements. C'est pourquoi je l'utilise.



2
votes
const res = await setImmediate(()=>{
     return readFile(filePath, 'UTF-8');
})

0 commentaires

0
votes

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');
}


0 commentaires