2017-06-29 6 views
1

Entschuldigung, wenn das eine dumme Frage ist, aber wie würde ich Dinge in eine Liste aufnehmen? Also, was ich habe, ist eine Schleife, die im Grunde läuft und versucht, alle URLs von einem Web-Scrapper in Tinyurls umzuwandeln. Es erzeugt immer noch eine leere Liste für images_short. Ich bin mit der Syntax von nodejs nicht sehr vertraut. Hier ist ein Ausschnitt von Code, habe ich einige Daten in der images_long Liste gesetzt:NodeJS + TinyURL - Hinzufügen von Elementen zu einer Liste

const TinyURL = require('tinyurl'); 

var images_long = ['https://hypebeast.imgix.net/http%3A%2F%2Fhypebeast.com%2Fimage%2F2017%2F06%2Fadidas-skateboarding-lucas-premiere-adv-primeknit-khaki-0.jpg?fit=max&fm=pjpg&h=344&ixlib=php-1.1.0&q=90&w=516&s=728297932403d74d2ac1afa5ecdfa97d', 'https://hypebeast.imgix.net/http%3A%2F%2Fhypebeast.com%2Fimage%2F2017%2F06%2Fadidas-nmd-r1-stlt-triple-black-first-look-0.jpg?fit=max&fm=pjpg&h=344&ixlib=php-1.1.0&q=90&w=516&s=918752eba81826e4398950efc69a5141']; 
var images_short = []; 

for (i = 0; i < 2; i++) { 
    TinyURL.shorten(images_long[i], function(res) { 
     images_short.push(res[i]); 
    }); 
} 

ich noch eine leere Liste, wenn ich images_short.push(res[i]);-images_short.push(res);

geändert
+0

'res' ist ein String, also nur' images_short.push (res); 'wird den Trick machen – Jthorpe

Antwort

0

res ist ein String, so dass nur images_short.push(res); tun der Trick. Außerdem sollten Sie in Bezug auf die Länge der Variablen iterieren Sie indizieren, und Sie sollten Ihre Indexvariable (i) var:

const TinyURL = require('tinyurl'); 

var images_long = [ 
    'https://hypebeast.imgix.net/http%3A%2F%2Fhypebeast.com%2Fimage%2F2017%2F06%2Fadidas-skateboarding-lucas-premiere-adv-primeknit-khaki-0.jpg?fit=max&fm=pjpg&h=344&ixlib=php-1.1.0&q=90&w=516&s=728297932403d74d2ac1afa5ecdfa97d', 
    'https://hypebeast.imgix.net/http%3A%2F%2Fhypebeast.com%2Fimage%2F2017%2F06%2Fadidas-nmd-r1-stlt-triple-black-first-look-0.jpg?fit=max&fm=pjpg&h=344&ixlib=php-1.1.0&q=90&w=516&s=918752eba81826e4398950efc69a5141']; 
var images_short = []; 

for (var i = 0; i < images_long.length; i++) { 
    TinyURL.shorten(images_long[i], function(res) { 
     images_short.push(res); 
    }); 
} 
+0

Ich bekomme immer noch eine leere Liste für images_short – hsel

+0

Der obige Code funktioniert an der Befehlszeile, weil Sie zu der Zeit Geben Sie 'images_short' ein, die http-Aufrufe haben ihren Wert zurückgegeben. Wenn Sie jedoch 'console.log (images_short)' im selben Codeblock verwenden, konnten die http-Aufrufe noch nicht ausgeführt werden. Insbesondere in JavaScript (und nodeJS) [alles ist asynchron außer Ihrem Code] (https://stackoverflow.com/a/44338368/1519199). Suchen Sie im Internet nach "JavaScript-Callbacks verstehen", um mehr darüber zu erfahren. – Jthorpe

+0

Also, wenn ich die neue Liste (images_short) zeigen wollte, wo würde ich die console.log (images_short) setzen? – hsel

0

Die tinyurl Bibliothek ist async.

Verwenden wir native Karte, würde der resultierende Rückruf nicht zurückgegeben werden, wenn wir versuchen, console.log(images_short) bis alle Verknüpfungen im Array gekürzt wurden.

Wir können jedoch async verwenden und async.map spezifisch verwenden, um die Ergebnisse wie im folgenden Beispiel zurückzugeben.

const TinyURL = require('tinyurl'); 
const async = require('async'); 

var images_long = [ 
    'https://hypebeast.imgix.net/http%3A%2F%2Fhypebeast.com%2Fimage%2F2017%2F06%2Fadidas-skateboarding-lucas-premiere-adv-primeknit-khaki-0.jpg?fit=max&fm=pjpg&h=344&ixlib=php-1.1.0&q=90&w=516&s=728297932403d74d2ac1afa5ecdfa97d', 
    'https://hypebeast.imgix.net/http%3A%2F%2Fhypebeast.com%2Fimage%2F2017%2F06%2Fadidas-nmd-r1-stlt-triple-black-first-look-0.jpg?fit=max&fm=pjpg&h=344&ixlib=php-1.1.0&q=90&w=516&s=918752eba81826e4398950efc69a5141']; 

function shorten(item, cb) { 
    TinyURL.shorten(item, function(res) { 
    cb(null, res); 
    }); 
} 

async.map(images_long, shorten, (err, results) => { 
    console.log(results); 
}); 

können wir images_short zuweisen, wenn Sie Konsistenz behalten möchten.

Verwandte Themen