Já jsem pořád ztracený v té asynchronitě...
Mám dva funkční kusy kodů a nejsem schopen je spojit...
Jedná se o vyplnění místa kde níže je napsáno "// X řádků kódu"
Kód 1 - má za úkol stáhnout XML z webu a naparsovat ho do JSON.
http.get('http://www.nejaky-web.net/xml/file.xml', function(res) {
var response_data = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
response_data += chunk;
});
res.on('end', function() {
parser.parseString(response_data, function(err, result) {
if (err) {
console.log('Got error: ' + err.message);
} else {
console.log('Loading XML done.');
}
});
});
res.on('error', function(err) {
console.log('Got error: ' + err.message);
});
});
Pak mám druhý kód, který vychází co mám v těch prvních 300 řádcích a taky mi funguje...:
puppeteer.launch({
headless: true
, userDataDir: '/var/www/node/data/'
, ignoreHTTPSErrors: true
, args: [
'--no-sandbox'
, '--disable-setuid-sandbox'
, '--enable-file-cookies'
]})
.then(async browser => {
const page = await browser.newPage();
// set timeout
await page.setDefaultNavigationTimeout(10000);
Object.keys(result.GP.c).forEach(function(k) {
res.write('<b>' + result.GP.c[k].p[0].$.title + '</b><br/>');
Object.keys(result.GP.c[k].code).forEach(function(kk) {
res.write(result.GP.c[k].code[kk]);
try {
await page.goto('https://www.neco.com/' + result.GP.c[k].code[kk], {waitUntil: 'networkidle2'});
if (await page.$('#CBody_dMessage') != null) {
res.write(' => <span style="color:orange;font-weight:bold;">D</span><br/>');
} else if (await page.$('#CB_aMessage') != null) {
res.write(' => <span style="color:red;font-weight:bold;">A</span><br/>');
} else {
res.write(' => <span style="color:green;font-weight:bold;">OK</span><br/>');
}
} catch (error) {
console.log('ERROR');
res.write('<br/><br/>ERROR<br/>');
res.end();
}
});
});
res.end();
await page.close();
await browser.close();
});
Zkousel jsem dane kusy kodu do sebe ruzne napasovavat ale jak z prava, tak z leva se vzdy dostanu do stavu, kde mi to hlasi:
SyntaxError: await is only valid in async function
Dokázal by mi někdo jednoduše vysvětlit jak tyto kusy kódu spojit? Nechce se mi dělat prasárnu, kde jedním voláním provedu download a uložení a druhým načtení tohoto souboru a provedení druhého kusu kódu. TO přece musí jít. Dokonce jsem první kus kódu se snažil přepsat do puppeteeru či třeba R2, ale prostě vždycky to na něčem zhavarovalo.
Díky...