Hirdetés
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Tóth Olivér: Kedvenc processzorok:
- eldiablo: 30 év után szakítottunk, de azért még beszélünk...
- GoodSpeed: Philips AWP9820 (vízlágyító) Calgon helyett?
- Dr. Mózes: Lakberendezési tanácskérés
- MasterDeeJay: i7 4980HQ asztali gépben (vs i7 4770)
- Brogyi: CTEK akkumulátor töltő és másolatai
- Parci: Milyen mosógépet vegyek?
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
-
LOGOUT
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Karma
félisten
Nem véletlenül írtam privátot, hogy kifejtem bővebben

No de (hahaha), akkor következzen egy egyszerű példa a te feladatodra. Egy plusz modul kell hozzá, a when. Ott kezdődik a dolog, hogy a requestből készíteni kell egy olyan változatot, ami callback függvény helyett egy ígérettel tér vissza.
(Az ígéret egy olyan objektum, ami majd valamikor a jövőben fog kiértékelődni, vagy sikeresen, vagy nem. Mindkét ágra fel lehet iratkozni külön, és ha láncba fűzi őket az ember, akkor úgy viselkedik, mint a rendes függvényhívások - az eredmények lépésről lépésre átpasszolódnak, a hiba meg az egészet megszakítja.)
Szóval a request függvényt be kell foglalni (ezt csinálja a requestP függvény), utána mehet a lényeg. Bátorkodtam kicsit egyszerűsíteni a kigyűjtésen, ha már van a cheerionak is map függvénye.
var when = require('when'),
cheerio = require('cheerio'),
request = require('request');
function requestP(url) {
return when.promise(function (resolve, reject) {
request(url, function (err, res, body) {
if (err) {
return reject(err);
} else if (res.statusCode !== 200) {
err = new Error("Unexpected status code: " + res.statusCode);
err.res = res;
return reject(err);
}
resolve(body);
});
});
}
requestP('https://news.ycombinator.com')
.then(function (html) {
var $ = cheerio.load(html);
return $('span.comhead').map(function (i, element) {
return $(element).prev();
});
})
.then(function (articles) {
console.log(articles);
})
.catch(console.error); -
Karma
félisten
Azért bonyolultabb ennél a helyzet, mert a request szigorúan aszinkron működik, azt mondani a Node-nak hogy "most fagyjál le amíg megjön a válasz" nem lehet.
Ha csak egy valamit akarsz csinálni, kirakhatod a callback függvényt egy külön, külső függvénybe, és név szerint adhatod oda a requestnek. Ezzel el lehet lavírozni, de tisztább, ha vagy az async, vagy a promise-alapú modulok (Q, when) valamelyikét berakod és láncot fűzöl a jövőbeli hívásokból.
Amit linkeltem forrás a whent használja erre.
-
Karma
félisten
Persze, csak rakd be a végső kiírást a feldolgozás végére.
var request = require('request');
var cheerio = require('cheerio');
var szoveg = new Array();
request('https://news.ycombinator.com', function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('span.comhead').each(function(i, element){
var a = $(this).prev();
szoveg.push(a);
});
}
console.log(szoveg); // <--- lentről, ide
});
Új hozzászólás Aktív témák
Hirdetés
- Nem engedi el a 128 GB-ot a Google
- TCL LCD és LED TV-k
- Most tényleg 8 GB VRAM-mal szúrja ki szemünk az NVIDIA??
- Bestbuy játékok
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Metal topik
- Kávé kezdőknek - amatőr koffeinisták anonim klubja
- Xbox Series X|S
- Vigneau interaktív lokálblogja
- Huawei P30 Pro - teletalálat
- További aktív témák...
- Bomba ár! HP Zbook 15u G5 - i7-8GEN I 16GB I 256-512SSD I 15,6" FHD I Cam I W11 I Garancia!
- Eladó egy Clevo PA71HS-G i7 7700hq Gtx1070 8gb(1660ti,2060 szint) Kérlek olvasd végig a hirdetést
- HP EliteBook 840 G9 i7-1265U 16GB 512GB 14" FHD+ 1 év teljeskörű garancia
- 154 - Lenovo LOQ (15IRX9) - Intel Core i5-13450HX, RTX 4060
- ÚJ könyv: Gloviczki Zoltán - A holnapután iskolája
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest


