0
votes

Faire la commande seulement après avoir obtenu tous les fichiers

Tous les scripts sur mon serveur sont sur PHP, mais une tâche est possible de résoudre uniquement avec node.js.

nœud.js obtient la liste des URL à partir de la base de données, obtient du contenu de chaque page et l'écrit aux fichiers. Après ce nœud.js appelle le script php, qui fonctionne avec des fichiers sauvegardés. xxx

mais le problème est lorsque vous appelez les scripts locaux, tous les fichiers n'ont pas été enregistrés.

ps Il faut la plupart du temps pour obtenir et enregistrer du contenu derrière les URL, mais ne pas prendre peu de lignes de la base de données.


1 commentaires

Enveloppez toutes vos procédures (comme écrire un fichier unique) dans une fonction asynchaire, puis attendre , c'est tout


3 Réponses :


1
votes

Vous devez attendre que la DB termine sa tâche, puis appelez le script local. Pour ce faire, vous pouvez encapsuler tout le code DB dans une promesse et appeler le script lorsqu'il est terminé (à l'intérieur du puis () de la promesse).

Une autre option définirait une fonction de rappel et appeler le script local une fois la requête DB terminée.


0 commentaires

0
votes

La meilleure solution possible pour de tels problèmes est d'utiliser async / attendre , vous pouvez essayer quelque chose comme: xxx

ps: je n'ai pas pu avoir une chance Pour tester cela, vous pouvez avoir besoin de modification.

espère que cela aide :)


1 commentaires

Le plaisir d'aider .. espérons que c'était utile :)



0
votes

Deux remarques: la base de données de requête nécessite également du temps; et j'utilise un autre module util fort>. Code de travail:

const util = require('util');
const mysql = require('mysql');
const filesystem = require('fs');
const requestPromise = require('request-promise');

const database = mysql.createConnection({/*options*/});
const query = util.promisify(database.query).bind(database);

(async () => {
    try {
        const pages = await query('SELECT * FROM pages');
//console.log(pages);
        for (let key of Object.keys(pages)){
            const page = pages[key]
            const url = "https://www.website.com/" + page.url
            const options = {
                uri: url,
                transform: function(body) {return body},
            }
            const html = await requestPromise(options)
            const writeResponse = await filesystem.writeFile(page.id + '.html', html, function(err){if (err){console.log(err)}})
        }
    } finally {
        database.end(); 
//console.log('all files have been saved')
        requestPromise({uri: 'http://127.0.0.1/parse_with_php'})
        process.exit()
    }
})()


0 commentaires