Множество к Преобразованию строк в JavaScript

Приложенный рассматриваемый код.

var http = require("http");
var i = 0;

var hostNames = ['www.1800autoland.com','www.youtube.com','www.1800contacts.com'];

for(i;i

У меня есть множество URL, и проблема, я приехал, чтобы консультироваться с местом, - то, что в моем коде, имена хоста [я] не показываю энное (или "я" в этом случае) индекс как последовательность. Продукция в пульте всегда была бы "не определена". Я попробовал Последовательность (), toString (), и много различных методов напрасно. Кто-то мог указать мне на правильное направление? Каково преобразование, которое я должен сделать?

0
nl ja de
Спасибо @ChristianStewart, который работал. Вы могли объяснить мне, почему мой метод не работал, в то время как это работало? Некоторые пользователи описали отзыв, в то время как некоторые объяснили, что это была асинхронная проблема.
добавлено автор theGreenCabbage, источник
Вы попробовали hostNames.get (i)
добавлено автор Christian Stewart, источник
Инициализируйте меня в для петли. для (вар i = 0;...) {}
добавлено автор tymeJV, источник
Нет No нет, проблема - отзыв. я больше не действителен в методе отзыва.
добавлено автор Joe, источник

3 ответы

Это - типичное закрытие проблема, которая происходит из-за асинхронности. Когда ваш отзыв запустит ценность , я всегда буду hostNames.length .

Зафиксировать его близко вокруг ценности я :

http.get(options, (function(res) {//'(' before function is optional, I use it to indicate immediate invocation
    return function (i) {  //this is the closed value for i
        console.log("url: " + hostNames[i]);
        console.log("status: " + res.statusCode);
       //.. etc
    };
}(i)));//immediate invocation with i

То, что важно, чтобы понять об использовании закрытий как это, то, что вы делаете много анонимных функций, не всего один. Каждая функция связана с ее собственной ценностью я .


Самый легкий способ избежать необходимости писать эти странные части кода не состоит в том, чтобы использовать для петли непосредственно, но используют карту функция. Как:

function array_map(array, callback) {
    var i, len = array.length;
    for (i = 0; i < len; i += 1) {
        callback(i, array[i]);
    }
}

Это делает его так, вы автоматически закрываете ценность я . Ваша петля будет похожа:

array_map(hostNames, function(i, hostname) {//i and hostname have the closed value
   //.. etc
});
3
добавлено
Я чувствовал, что это было жестко, чтобы понять. Закрытия имеют больше смысла, поскольку я программирую в JavaScript больше? Есть ли, кто-либо рекомендуемый читает?
добавлено автор theGreenCabbage, источник
Я люблю это место. Я счастлив я столько больших ответов. Я спросил своего коллегу о asynch и синхронном программировании, и он дал мне эту большую статью, которая использует кофе Starbucks в качестве аналогии: eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf Синхронный означал бы, что парень в кассире берет заказ, делает кофе, дает его клиенту, затем перекручивание это. Асинхронный означает, что он берет заказ и испускает его баристе, чтобы сделать кофе. Asynch = быстрый и эффективный. Синхронизация = медленный, больше работы, и неэффективный.
добавлено автор theGreenCabbage, источник
Я понимаю это. То, как я интерпретирую его, является более эффективным способом сделать что-то.
добавлено автор theGreenCabbage, источник
Я думаю, что закрытия - одна из более твердых частей о JavaScript для людей, происходящих из неасинхронных языков. Don' t боятся его, охватывают его. Закрытия чрезвычайно сильны, таким образом, я надеюсь they' ll имеют больше смысла вам в будущем:) Я обновил свой ответ с моим array_map предложение.
добавлено автор Halcyon, источник
Большой ряд на JavaScript - "Крокфорд на JavaScript". youtube.com/watch? v=JxAXlJEmNMg (том 1). Я надеюсь, что они покажут вам, как потрясающий JavaScript (или может быть).
добавлено автор Halcyon, источник
Асинхронное программирование doesn' t внезапно делают вашу программу управляемой быстрее: P It' s отличный способ достигнуть интерактивности без некоторых недостатков, которые имеют нити. "Управляемый быстро, закончите рано", способ сделать циклы событий и сохранять все отзывчивым.
добавлено автор Halcyon, источник

Это закрытие проблема, попробуйте это:

(function (i) {
http.get(options, function(res){
    console.log("url: " + hostNames[i]);
    console.log("status: " + res.statusCode);

    for(var item in res.headers){
        if(item == "server"){
            console.log(item + ": " + res.headers[item]);
        }
        if(item == "x-powered-by"){
            console.log(item + ": " + res.headers[item]);
        }
        if(item == "x-aspnet-version"){
            console.log(item + ": " + res.headers[item]);
        }
    }
    console.log("\n");
})
})(i);
1
добавлено
Спасибо! И спасибо за связь, чтобы закрыть прения.
добавлено автор theGreenCabbage, источник

Необходимо использовать .get (i) метод, чтобы восстановить пункт. Вы не должны инициализировать прилавок во множестве, как другие заявили.

0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском