Pull to refresh
5
0
Alexandr Curtov@kurtov

Fullstack

Send message
Список измененных файлов в PHPStorm можно посмотреть либо в панели git (Alt+9), либо в окне перед коммитом (ctrl+K).

Для навигации по сущностям я использую ctrl + click, первый клик переносит к определению, второй — загружает список всех мест использования.
если возникнет ошибка с одним юзером, то перейдем к следующему, а не завершим работу
let spammers = [];

getUser()
    .catch(onGetUserErrorHandler)
    .then(getSpammer)
    .then(() => console.log(spammers));

function getSpammer(user) {

    if (user === null) {
        return;
    }

    if (spammers.length === 10) {
        return;
    }

    return isSpammer(user)
        .then((isSpammer) => isSpammer && spammers.push(user))
        .catch(onSpammerCheckErrorHandler)
        .then(getUser)
        .catch(onGetUserErrorHandler)
        .then(getSpammer);
}


Release V8 5.5 24 октября (два дня до выхода node 7). В этом релизе представлены async\await функции.
Баг с утечкой исправлен 16 сентября, v8 5.4 был зарелизен 9 сентября
Да, вы правы. На самом деле я не использую next как промис. Вместо того чтобы формировать массив промисов, я итерирую массив объектов, по которым нужно сделать последовательные ассинхронные вызовы и в then() создаю анонимную функцию возвращающую промис. Т.е. это как раз фабрика о которой шла речь.

Виноват, что бездумно упростил свой вариант без проверки и выдал как верный.
Т.к. я не Java программист, то делаю таким образом:
function executeSequentially(promises) {
  var result = Promise.resolve();
  promises.forEach(function (promise) {
    // result = result.then(promise);
    result = result.then(() => promise);
  });
  return result;
}


Через reduce еще изящней
function executeSequentially(promises) {
  return promises.reduce(function(first, next) {
    return first.then(() => next);
  }, Promise.resolve());
}
Сверху и снизу вы видите абсолютно идентичные по функциональности сниппеты.

Но это не так, в случае с промисами вам достаточно вызвать функцию. В случае с генераторами вам нужно вызвать функцию и построить цепочку промисов самостоятельно, попутно возвращая в next() полученное значение. Поправьте если я ошибаюсь.

// Вызов варианта с промисом
renderUserData();

// Вызов варианта с генератором
let generator = renderUserData();

generator.next().value
    .then(user => generator.next(user).value)
    .then(paymentDetails => generator.next(paymentDetails ).value)



Очень похоже на то, что мы использовали генератор ради использования генератора. Возможно вы скажете, что внешний вызов генератора можно отдать на откуп сопрограммам типа co.js — соглашусь, что это позволяет получать некий профит.

Смысл в том, что генераторами нельзя заменить промисы (для асинхронных вызовов). Вообще никак. Async\await — да, киллер фича, нас ждет светлое будущее (заглянуть в будущее уже можно с помощью babel и подобных)
Согласен, возьмем пример из статьи
function* renderUserData(render) {
    let user = yield getUser();
    let paymentDetails = yield getUserDetails(user.payment.id);
    render(paymentDetails);
}

первый yield вернет user? Нет, он вернет promise, которого где то снаружи функции нужно дождаться, чтобы снова вызвать next(), тоже самое для getUserDetails(). Код не полный, а приводится как довод в пользе генераторов.
Если использовать промисы как коллбэки, то зачем их вообще использовать?
// Пример из статьи
(render) => {
    getUser().then((user) => {
        getUserPaymentDetails(user.payment_id).then((paymentDetails) => {
            render(paymentDetails);
        });
    });
};

// Без лишних скобок
(render) => {
    getUser()
        .then(user => user.payment_id)
        .then(getUserPaymentDetails)
        .then(render);
};
такие как Map, Set, WeakMap, WeakSet — все они должны содержать свой итератор

WeakMap, WeakSet — не содержат и не должны, иначе они бы не были Weak
Почему бы не совметить два подхода? Есть некая станция с запасом топлива, манипуляторами и несколькими буксирами. Буксир отправляется к цели, захватывает цель и летит к станции. Там производится заправка и затем пуск спутника. Станций может быть несколько, чтобы снизить топливозатраты. На станциях могут работать люди. Можно выполнять не только заправку, но и ремонт, апгрейд.
А Pornhub с живой девушкой еще лучше.
А я и не говорил, что они чистые.
Без промисов использую такой подход:

$.post('/url', {data: 'data'}, onResponseCallback1);

function onResponseCallback1() {
    
    $.post('/url', {data: 'data'}, onResponseCallback2);

}

function onResponseCallback2() {
    
    //...

}


На ноде с промисами:

Promise.resolve()
    .then(onResponseCallback1)
    .then(onResponseCallback2)
    .catch(onError)

function onResponseCallback1(data) {
    
    return data;

}

function onResponseCallback2(data) {
    
    return data;

}

// Для обработки ошибок
function onError() {}


Никаких пирамид, функции можно делать чистыми, на мой взгляд более нагляден порядок выполнения. Возможно известная практика, на открытие Америки не претендую.
Услуга виртуального номера это дополнительные расходы (>10$ в месяц) и дополнительные риски.

Для подтверждения адреса проживания большинство сервисов просит один из документов:
1. Выписка из банка (bank statement) — где указано имя и адрес.
2. Счет за коммунальные услуги (кроме интернет и мобильной связи), гдеуказано имя и адрес
3. Документ выданный государством, где указано имя и адрес.
Вероятно еще какие то опции. Имя и адрес должны совпадать с ранее указанными. Документ должен быть выдан не позднее трех месяцев.

Судя по описанию, я как раз нахожусь в вашей целевой аудитории, как частый путешественник, который подолгу живет в какой то точке мира. Ранее я жил в Китае и пользовался китайской картой и биткойн биржей и всё было прекрасно. Уже несколько месяцев я пытаюсь найти приемлемый способ обмена биткоин на доллары или евро и не могу, скрыте комиссии, изменненный курс, долгие сроки, невыполнимые условия.
Приемлемость на примере китайской биржи:
1. Возможность обмена биткойн на фиат и обратно без комиссий, иногда на бирже поиграть.
2. Вывод в наличные c минимальной комиссией, у китайцев например 0.38% или минимум 2 юаня. В сравнении Bitstamp написано $15, но сняли $50 и сказали что это не они, а кто то другой.
3. Срок вывода не более суток.
4. Дешевый старт. Карта за 10 юаней или за ~$17 — разница имеет значение, причем долларовую каждый год перевыпускать за доп плату, когда как китайская с неограниченным сроком.
5. Скорость старта. В Китае карту делают за полчаса в банке, попробовать какой то сервис можно за один день. Долларовую же могут за $50 могут курьером за 4-5 дней прислать.
Я понимаю, что разница в процессингах Китая и запада значительная, но меня как обывателя это не волнует.
1. По поводу снятие фиатных денег в банкомате с виртуальной карты при помощи телефона поподробней можно? Был уверен, что виртаульные карты только для оплаты в интернете.
2. На сайте указан ежемесечный платеж в 1$ за смс уведомление, которое обязательное. Т.е. требуется привязка к телефонному номеру. Я, как человек, часто меняющий место жительства всегда испытывал проблемы с тем что при переезде оказывался в ситуации когда имелся новый номер, но не было доступа к старому. Можно ли не привязывать номер мобильного?
3. Многие подобные сервисы требует подтверждения места проживания. Необходимо ли это у вас? Если да, то необходимо ли повторно подтверждать при смене места проживания?
Немного не ясен выбор microUSB в качестве зарядки для пользователя iPhone.
Добавление к своему сложному паролю окончания сайта (сервиса) мне кажется плохой практикой. Если один из паролей будет уведен, то остальные могут быть подобраны. Например, забылись и залогинились в кафе с вайфая на vk.com c паролем «Рождественское утро 2015 vk.com». Злоумышленник будет очень рад когда обнаружит, что «Рождественское утро 2015 gmail.com» то же работает.

Хорошей практикой считаю использование keepass. Генерирует пароли сразу за звездочками, для копирование не нужно видеть пароль, при вставке тоже одни звездочки. Как итог, я даже никогда не видел большую часть паролей. Пользуюсь года четыре.

Всего в памяти два пароля: база keepass и Gmail (с двухфакторной авторизацией).
Это короткий номер телефона службы поддержки жд. В Китае многие сервисы имеют 5ти значный номер службы поддержки и сайт с таким же адресом. (10010, 10086)

Почему именно этот номер я не знаю. Вероятно это регулируется государством (выдача номера, требование к названию сайта и т.д.)

Information

Rating
5,763-rd
Location
Кишинев, Молдова, Молдова
Date of birth
Registered
Activity