Ich habe mehrere Beiträge zu diesem Thema gelesen, aber leider mit meiner Situation zu kämpfen.Verschlüsse, Schleifen und Versprechen
Ich ziehe einige URLs aus einem Array von URLs und dann diese Links verwenden, um (sagen wir) den Titel der Seite von diesen Unterwebsites zu erhalten. Am Ende möchte ich eine Liste von Original-URLs und ein Array von Titeln (von den Unterlinks). d. h. in eine Site/Domain gehen, einige Links finden, diese Links locken, um Seitentitel zu finden.
Problem ist, dass mein titleArray nur ein Versprechen und nicht die tatsächlichen Daten zurückgibt. Ich bekomme absolut keine Schließungen und Versprechungen. Der Code wird im aktuellen Knoten ausgeführt. Ich verwende persönliche Websites in meinem echten Code, aber ersetzte häufig verwendete Sites, um ein Beispiel zu zeigen.
const popsicle = require('popsicle');
var sites = ['http://www.google.com','http://www.cnn.com'];
// loop through my sites (here I'm just using google and cnn as a test
for(var i=0;i<sites.length;i++) {
// call function to pull subsites and get titles from them
var titleArray = processSites(sites[i]);
console.log(sites[i] + ": " + titleArray);
}
// get request on site and then get subsites
function processSites(url) {
return popsicle.get(url)
.then(function(res) {
var data = res.body;
// let's assume I get another collection of URLs
// that I pull from the main site
var subUrls = ['http://www.yahoo.com','http://www.espn.com'];
var titleArray = [];
for(var j=0;j<subUrls.length;i=j++) {
var title = processSubSites(subUrls[j])
titleArray.push(title);
}
return titleArray;
});
}
function processSubSites(url) {
return popsicle.get(url)
.then(function(res) {
var data = res.body;
// let's say I pull the title of the site somehow
var title = "The Title for " + url;
console.log(title);
return title;
});
}
Das Ergebnis nach diesem Lauf ist:
http://www.google.com: [object Promise]
http://www.cnn.com: [object Promise]
The Title for http://www.espn.com
The Title for http://www.espn.com
The Title for http://www.yahoo.com
The Title for http://www.yahoo.com
während es sein sollte:
http://www.google.com: ['The Title for http://www.yahoo.com', 'The Title for http://www.espn.com']
http://www.cnn.com: ['The Title for http://www.yahoo.com', 'The Title for http://www.espn.com']
...
1. Sind yahoo.com und espn.com die SubUrls für die MainUrls? Darf ich Ihnen vorschlagen, Ihre Frage/Ihr Beispiel mit MainUrls und den entsprechenden SubUrls zu modifizieren und dann bitte das tatsächliche/beabsichtigte Ergebnis? 2. Auch ziehen Sie Titel für die SubUrls oder die wichtigsten – Jaya
Was ist die Version von NodeJs, die Sie verwenden. Wenn es etwas> = 7.6 ist, können Sie Async nutzen und warten - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function#Simple_example – codtex
@Jaya - sorry, ich habe hier kein gutes Beispiel genommen. Tatsächlich sind die Haupt-URLs oder Domain-Level und das Sub-System wirklich innerhalb einer Domain. Ich ziehe nur Titel von den SubUrls. –