Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

l-liava-l 18.01.2016 17:50

Цитата:

не совсем понимаю что делает этот код (0 , _typeof4.default), все время возвращает 2й аргумент?? И смысел ?
Из-за запятой

Представим два сервера с одной версией ноды и бабеля. На первом new Date().toLocaleString(params) выдает отформатированные строки, а на втором то же самое что и new Date(). Я так понимаю это как-то связано с системными настройками? Подскажите плз куда копать.

trikadin 18.01.2016 22:23

Цитата:

Сообщение от l-liava-l
Представим два сервера с одной версией ноды и бабеля. На первом new Date().toLocaleString(params) выдает отформатированные строки, а на втором то же самое что и new Date(). Я так понимаю это как-то связано с системными настройками? Подскажите плз куда копать.

Загуглил за тебя.

Рекомендую поставить moment и не любить себе мозги :)

l-liava-l 18.01.2016 22:54

trikadin,
Красотень :)

cyber 18.01.2016 23:02

Цитата:

Сообщение от l-liava-l
Из-за запятой

Понятнее смысел этой записи не стал

yazonnile 19.01.2016 19:02

Ребят. Объясните плз профит async/await по сравнению с цепочками промисов.
Самый простой пример, что я смог придумать :)
1 Объем кода такой же +/-
2 приятность синтаксиса - спорно. Кому что больше нравится.
???
Больше не смог ничего придумать.
Подозреваю, что я просто не умею готовить.

async function some() {
	console.log(1);

	await new Promise(resolve => {
		setTimeout(() => {
			console.log(2);
			resolve();
		}, 1000);
	});

	console.log(3);
};

some();


function some() {
	console.log(1);

	new Promise(resolve => {
		setTimeout(() => {
			console.log(2);
			resolve();
		}, 1000);
	}).then(() => {
		console.log(3);
	});
}

some();

cyber 19.01.2016 22:43

yazonnile,
1. В большинстве случаев это не будет явный вызов промиса а выззов какого то метода.
2. суть в том что у тебя получится асинхроный код по сути записаный как синхронный.

function getAsyncData() {
  return new Promise( ( resolve ) => {
    setTimeout( () => {
      resolve("data");
    }, 1000 );
  } )
  
}

async function getData(){
	 var val = await getAsyncData(); 
   // далее пишем синхронный код
   var val = await getAsyncData();// снова получаем асинхронный данные
   //дальше пишем синхронный код и не каких callback
}
getData();

Erolast 20.01.2016 11:03

Цитата:

1 Объем кода такой же +/-
Допустим, нам надо описать алгоритм регистрации юзера, где необходимо запросить логин, язык, пароль и эмэйл, а затем еще и сохранить данные в ДБ. Логин должен быть уникальным, так что если клиент пришлет уже занятый, надо его об этом оповестить и запросить другой. Если опять пришлет занятый, повторить, и так по кругу.
const loginsTaken = new Set();

class User {
    async register() {
        let login = await this.request("login");
        
        if (loginsTaken.has(login)) {
            do {
                this.send("login is taken already");
                login = await this.request("login");
            } while (loginsTaken.has(login));
        }

        loginsTaken.set(login);
        
        let language = await this.request("language");
        let password = await this.request("password");
        let email = await this.request("email");

        Object.assign(this, {language, login, password, email});

        await this.save();

        this.send("registered successfully");
    }
}


Перепишешь на чистые обещания?

yazonnile 20.01.2016 12:54

Спасибо за разъяснения!

Erolast,
код, который вне if можно легко переписать на цепочку. А код внутри if я бы вынес в отдельную функцию. Но идею я понял. Спасибо.

cyber,
В большинстве случаев это не будет явный вызов промиса а выззов какого то метода.
А как интерпритатор поймет, что ему передается асинхронный вызов?
К примеру var result = await this.some();
Метод some должен же вернуть промис, чтобы код работал правильно. Или я недопонял?

kobezzza 20.01.2016 13:36

await может принимать что угодно, хоть

await 1


И это позволяет писать одинаковый интерфейс для синхронных и асинхронных вызовов.

yazonnile 20.01.2016 14:11

Да. Но если там асинхронный вызов?
К примеру
await setTimeout(a => 10);

Т.е чтобы await сработало правильно и дождалось результата - нужно вернуть промис же?


Часовой пояс GMT +3, время: 13:25.