NodeJS + TinyURL - 将项目添加到列表中

时间:2017-06-29 01:27:44

标签: javascript node.js tinyurl

很抱歉,如果这是一个愚蠢的问题,但我如何才能将项目添加到列表中?所以我得到的是一个基本上贯穿的循环,并尝试将所有网址从网络剪贴板转换为tinyurls。它仍然为images_short生成一个空列表。我对nodejs的语法不太熟悉。这是一段代码,我在images_long列表中放了一些数据:

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]);
    });
}

当我将images_short.push(res[i]);更改为images_short.push(res);

时,我仍然会看到一个空列表

2 个答案:

答案 0 :(得分:0)

res是一个字符串,所以只需images_short.push(res);即可。此外,您应该根据要编制索引的变量的长度进行迭代,并且应该var索引变量(i):

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);
    });
}

答案 1 :(得分:0)

tinyurl库是异步的。

我们是否使用原生地图,如果我们尝试console.log(images_short)直到数组中的所有链接都缩短,则不会返回结果回调。

但是,我们可以使用async并特定地使用async.map来返回结果,如下例所示。

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);
});

如果您想保持一致,我们可以指定images_short