Меню

Candy promise ошибка английский скаинг

«Уровень носителя» звучит даже круче, чем С2 или Proficiency. Хотя нейтивы бывают разные, и некоторые сами частенько делают ошибки в родном английском. Мы уже разбирали 5 самых распространенных, добавим еще 3.

Есть у некоторых носителей такая привычка: говорить myself там, где нужно me. Многие из них считают, что так они звучат более аристократично. Например: «Thanks for having my wife and myself at your lovely party» («Спасибо, что пригласили меня с женой на вашу прекрасную вечеринку»).

Русскоязычные обычно так не делают, но предлагаем на всякий случай освежить в памяти, как использовать me, myself и I.

Местоимение I (я) всегда что-то делает, это очень активное слово. Ему нужен глагол.

I am British. I live in Moscow. I once accidentally locked myself inside the boot.
Я британец. Я живу в Москве. Я однажды случайно закрыл себя в багажнике машины.

Me — дополнение, то есть используется, когда какое-либо действие направлено на вас. На русский переводим как «меня», «мне», «мной».

Patrick, can you bring me a waffle fry? Oh my god, you didn’t have to bring all of it. Ah, so good.
Патрик, принесешь мне жареные вафли? Божечки, не надо было прям все приносить. Ой, как вкусно.

Myself — это все, что переводится на русский как «себя», «себе», «сам»: «I can do it myself» («Я могу сделать это сам»), «I love myself» («Я люблю себя»).

God, I love myself!
Боже, как же я себя люблю!

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

Ваш личный план «Английский, чтобы прокачать грамматику»

Скоро на имейл вам придет письмо с инструкцией. А пока запишитесь на бесплатное онлайн-занятие с преподавателем и получите в подарок еще 2 урока.

Скоро на имейл вам придет письмо с инструкцией. А в течение часа мы позвоним и подберем удобное время занятия. Продуктивного дня 🙂

Ой, произошла ошибка обработки. Попробуйте еще раз чуть позднее.

Ой, произошла ошибка обработки. Скорее всего, такой имейл или телефон уже зарегистрирован.

Есть такой лайфхак: когда хочешь сказать, что чего-то много, но наверняка не знаешь, исчисляемое это что-то или нет, можно использовать a lot of вместо many или much. После a lot of можно поставить любое существительное. A lot of часто звучит более разговорно.

Есть такие носители, которые считают, что это одно слово: alot. И пишут слитно, как одно слово. Возможно, путаница из-за того, что в английском действительно есть глагол to allot — отводить, выделять. Например, на экзамене нужно успеть ответить на все вопросы within the time allotted — за отведенное на это время. Компания может выделить определенную сумму денег на новый проект — to allot money for the project. А a lot of как «много» все-таки пишется раздельно.

Irregardless для англоязычного мира — это как «вообщем» для нас. Очень неграмотно, но очень распространено.

Проблема в том, что irregardless образовано от слова regardless — в любом случае, независимо от обстоятельств. По логике английского языка, приставка ir- должна образовывать слово с противоположным значением. Но irregardless используют как синоним regardless! Причем постоянно. С 2020-го это слово даже есть в словаре Merriam-Webster.

Позиция редакции словаря такова: «Слово используется в речи с 1795 года. Мы не придумываем английский язык, а просто его фиксируем. Если люди постоянно используют слово в одном и том же значении в разных частях мира, велики шансы, что это слово окажется в нашем словаре». В словаре есть пометка nonstandard, то есть irregardless обычно не используют образованные люди. Но и однозначно сказать, что это грубая ошибка, теперь больше нельзя.

В обложке используются фото: KatePh/Shutterstock; Krakenimages.com/Shutterstock

JavaScript, Разработка веб-сайтов, Программирование


Рекомендация: подборка платных и бесплатных курсов таргетированной рекламе — https://katalog-kursov.ru/

Распространенные ошибки при работе с промисами в JavaScript, о которых должен знать каждый

Хотел бы я знать об этих ошибках, когда изучал JavaScript и промисы.

Всякий раз, когда ко мне обращается какой-нибудь разработчик и жалуется на то, что его код не работает или медленно выполняется, я прежде всего обращаю внимание на эти ошибки. Когда я начал программировать 4 года назад, я не знал о них и привык их игнорировать. Однако после назначения в проект, который обрабатывает около миллиона запросов в течение нескольких минут, у меня не было другого выбора, кроме как оптимизировать свой код (поскольку мы достигли уровня, когда дальнейшее вертикальное масштабирование стало невозможным).

Поэтому в данной статье я бы хотел поговорить о самых распространенных ошибках при работе с промисами в JS, на которые многие не обращают внимания.

Ошибка № 1. Использование блока try/catch внутри промиса

Использовать блок try/catch внутри промиса нецелесообразно, поскольку если Ваш код выдаст ошибку (внутри промиса), она будет перехвачена обработчиком ошибок самого промиса.

Речь идет вот о чем:

new Promise((resolve, reject) => {
  try {
    const data = someFunction()
    // ваш код
    resolve()
  } catch(e) {
    reject(e)
  }
})
  .then(data => console.log(data))
  .catch(error => console.log(error))

Вместо этого позвольте коду обработать ошибку вне промиса:

new Promise((resolve, reject) => {
  const data = someFunction()
  // ваш код
  resolve(data)
})
  .then(data => console.log(data))
  .catch(error => console.log(error))

Это будет работать всегда, за исключением случая, описанного ниже.

Ошибка № 2. Использование асинхронной функции внутри промиса

При использовании асинхронной функции внутри промиса возникают некоторые неприятные побочные эффекты.

Допустим, Вы решили выполнить некоторую асинхронную задачу, добавили в промис ключевое слово «async», и Ваш код выдает ошибку. Однако теперь Вы не можете обработать эту ошибку ни с помощью .catch(), ни с помощью await:

// этот код не сможет перехватить ошибку
new Promise(async() => {
  throw new Error('message')
}).catch(e => console.log(e.message))

// этот код также не сможет перехватить ошибку
(async() => {
  try {
    await new Promise(async() => {
      throw new Error('message')
    })
  } catch(e) {
    console.log(e.message)
  }
})();

Каждый раз, когда я встречаю асинхронную функцию внутри промиса, я пытаюсь их разделить. И у меня это получается в 9 из 10 случаев. Тем не менее, это не всегда возможно. В таком случае у Вас нет другого выбора, кроме как использовать блок try/catch внутри промиса (да, это противоречит первой ошибке, но это единственный выход):

new Promise(async(resolve, reject) => {
  try {
    throw new Error('message')
  } catch(error) {
    reject(error)
  }
}).catch(e => console.log(e.message))

// или используя async/await
(async() => {
  try {
    await new Promise(async(resolve, reject) => {
      try {
        throw new Error('message')
      } catch(error) {
        reject(error)
      }
    })
  } catch(e) {
    console.log(e.message)
  }
})();

Ошибка № 3. Забывать про .catch()

Эта одна из тех ошибок, о существовании которой даже не подозреваешь, пока не начнется тестирование. Либо, если Вы какой-нибудь атеист, который не верит в тесты, Ваш код обязательно рухнет в продакшне. Потому что продакшн строго следует закону Мерфи, который гласит: «Anything that can go wrong will go wrong» (можно перевести так: «Если что-то может пойти не так, это обязательно произойдет»; аналогией в русском языке является «закон подлости» — прим. пер.).

Для того, чтобы сделать код элегантнее, можно обернуть промис в try/catch вместо использования .then().catch().

Ошибка № 4. Не использовать Promise.all()

Promise.all() — твой друг.

Если Вы профессиональный разработчик, Вы наверняка понимаете, что я хочу сказать. Если у Вас есть несколько не зависящих друг от друга промисов, Вы можете выполнить их одновременно. По умолчанию, промисы выполняются параллельно, однако если Вам необходимо выполнить их последовательно (с помощью await), это займет много времени. Promise.all() позволяет сильно сократить время ожидания.

const {promisify} = require('util')
const sleep = promisify(setTimeout)

async function f1() {
  await sleep(1000)
}
async function f2() {
  await sleep(2000)
}
async function f3() {
  await sleep(3000)
}

// выполняем последовательно
(async() => {
  console.time('sequential')
  await f1()
  await f2()
  await f3()
  console.timeEnd('sequential') // около 6 секунд
})();

Теперь с Promise.all():

(async() => {
  console.time('concurrent')
  await Promise.all([f1(), f2(), f3()])
  console.timeEnd('concurrent') // около 3 секунд
})();

Ошибка № 5. Неправильное использование Promise.race()

Promise.race() не всегда делает Ваш код быстрее.

Это может показаться странным, но это действительно так. Я не утверждаю, что Promise.race() — бесполезный метод, но Вы должны четко понимать, зачем его используете.

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

const {promisify} = require('util')
const sleep = promisify(setTimeout)

async function f1() {
  await sleep(1000)
}
async function f2() {
  await sleep(2000)
}
async function f3() {
  await sleep(3000)
}

(async() => {
  console.time('race')
  await Promise.race([f1(), f2(), f3()])
})();

process.on('exit', () => {
 console.timeEnd('race') // около 3 секунд, код не стал быстрее!
})

Ошибка № 6. Злоупотребление промисами

Промисы делают код медленнее, так что не злоупотребляйте ими.

Часто приходится видеть разработчиков, использующих длинную цепочку .then(), чтобы их код выглядел лучше. Вы и глазом не успеете моргнуть, как эта цепочка станет слишком длинной. Для того, чтобы наглядно убедиться в негативных последствиях такой ситуации, необходимо (далее я немного отступлю от оригинального текста для того, чтобы описать процесс подробнее, нежели в статье — прим. пер.):

1) создать файл script.js следующего содержания (с лишними промисами):

new Promise((resolve) => {
  // некий код, возвращающий данные пользователя
  const user = {
    name: 'John Doe',
    age: 50,
  }
  resolve(user)
}).then(userObj => {
    const {age} = userObj
    return age
}).then(age => {
  if(age > 25) {
    return true
  }
throw new Error('Age is less than 25')
}).then(() => {
  console.log('Age is greater than 25')
}).catch(e => {
  console.log(e.message)
})

2) открыть командную строку (для пользователей Windows: чтобы открыть командную строку в папке с нужным файлом, зажимаем Shift, кликаем правой кнопкой мыши, выбираем «Открыть окно команд»), запустить script.js с помощью следующей команды (должен быть установлен Node.js):

node --trace-events-enabled script.js

3) Node.js создает файл журнала (в моем случае node_trace.1.txt) в папке со скриптом;

4) открываем Chrome (потому что это работает только в нем), вводим в адресной строке «chrome://tracing»;

5) нажимаем Load, загружаем файл журнала, созданного Node.js;

6) открываем вкладку Promise.

Видим примерно следующее:

Зеленые блоки — промисы, выполнение каждого из которых занимает несколько миллисекунд. Следовательно, чем больше будет промисов, тем дольше они будут выполняться.

Перепишем script.js:

new Promise((resolve, reject) => {
  const user = {
    name: 'John Doe',
    age: 50,
  }
  if(user.age > 25) {
    resolve()
  } else {
    reject('Age is less than 25')
  }
}).then(() => {
  console.log('Age is greater than 25')
}).catch(e => {
  console.log(e.message)
})

Повторим «трассировку».

Видим следующее:

Зеленых блоков (промисов) стало меньше, а значит время выполнения кода сократилось.

Таким образом, использовать несколько промисов следует только в том случае, если Вам необходимо выполнить некоторый асинхронный код.

Благодарю за внимание. Всем хороших выходных! Буду рад любым замечаниям.

Hello, this is Ludwig!

Ludwig is the first sentence search engine that helps you write better English and feel more confident about it.

Learn More

Sentence examples for I promise candy from inspiring English sources

Sometimes I promise candy to children who can stop squabbling.

Show more…

Mr. Shorin promised candy industry expertise and contacts, an immediate infusion of capital and as much as a quarter of a million dollars to follow.

She had networked her way to Arthur T. Shorin, an investor and former chief executive of the Topps Company, a confectionary company known for its baseball trading cards, who promised candy industry expertise and contacts and an immediate infusion of $250,000, with more to come if justified.

Consider the 1995 study of interning doctors who were asked to figure out a medical problem, with one half of the group promised candy when they finished.

At Maya’s house, the children marching inexorably through the darkness toward the promised candy will get their treats.

And despite the many creepy vans out there — filled with promised candy on the inside, painted with majestic eagles and wolves on the outside — children are rightly skeptical of free candy from people they don’t know.

Show more…

English sentences from reliable sources

Ludwig finds examples from newspapers, reliable and well written scientific journals, official documents and more!

Need more results?

Sign up for free or try Premium free for 15 days

7 Search Results

3 Daily Queries

_

_

_

_

15 Search Results

6 Daily Queries

Interactive Results

_

_

_

Unlimited Daily Queries

60 Search Results

Interactive Results

Advanced Filter

Library

Ad-Free

Used by millions of students, scientific researchers, professional translators and editors from all over the world!

Ludwig does not simply clarify my doubts with English writing, it enlightens my writing with new possibilities

Quote

Simone Ivan Conte

Software Engineer at Adobe, UK
PhDs in Computer Science, University of St Andrews, UK

What is Ludwig?

Ludwig is the first sentence search engine that helps you write better English by giving you contextualized examples taken from reliable sources.

Ludwig Video

youtubeIcon

Promise — это удобный способ для обработки асинхронных операций в JavaScript, который помог нам уйти от «callback hell» в нашем коде. Однако многие разработчики не до конца понимают, что происходит у промисов под капотом и используют их неправильно, теряя все преимущества этой прекрасной технологии.

Давайте разбираться, какие ошибки встречаются особенно часто и как их можно избежать.

Ошибка #1. Promise Hell

Убегая от «ада коллбэков», мы иногда попадаем в «ад промисов»:

userLogin('user').then(function(user){
    getArticle(user).then(function(articles){
        showArticle(articles).then(function(){
            // ...
        });
    });
});

В этом фрагменте сразу три промиса, вложенных друг в друга: userLogin, getArticle и showArticle. Сложность растет с каждой строчкой, и этот код уже довольно сложно читать. По сути мы обменяли шило на мыло, используя callback-style с промисами.

Фишка обещаний в том, что мы можем составлять из них цепочки. Для этого нужно лишь возвращать из промиса нужное значение и прицеплять к нему следующий с помощью then.

userLogin('user')
  .then(getArticle)
  .then(showArticle)
  .then(function(){
       // ...
});

Ошибка #2. try/catch внутри промиса

Блок try/catch нужен для обработки ошибок, но использовать его внутри промиса — плохая идея. В этом просто нет необходимости. Если внутри произойдет что-то нехорошее, Promise автоматически обработает это сам.

new Promise((resolve, reject) => {
  try {
    const data = doThis();
    // ...
    resolve();
  } catch (e) {
    reject(e);
  }
})
  .then(data => console.log(data))
  .catch(error => console.log(error));

Все ошибки (даже опечатки) внутри тела промиса будут замечены самим промисом и перенаправлены в обработчик из метода catch. В результате мы получим отклоненное обещание (rejected).

new Promise((resolve, reject) => {
  const data = doThis();
  // do something
  resolve()
})
  .then(data => console.log(data))
  .catch(error => console.log(error));

Очень важно использовать блок .catch() для обработки ошибок промисов, которые может быть сложно отловить другими способами.

Ошибка #3. Асинхронные функции внутри промиса

Синтаксис Async/Await — это очень удобный способ работать с промисами в синхронном стиле.

Если мы используем перед объявлением функции ключевое слово async, то результат, который она возвращает, будет обернут в промис. При вызове такой функции мы можем использовать ключевое слово await, чтобы остановить выполнение кода до тех пор, пока этот промис не будет выполнен (или отклонен).

Но если вы помещаете асинхронную функцию в промис, то появляются некоторые неожиданные эффекты.

Давайте попробуем использовать async-функцию внутри промиса и представим, что ваш код выбрасывает ошибку.

Даже если вы используете блок .catch() или дождетесь выполнения промиса внутри конструкции try/catch, то все равно не сможете сразу же обработать ошибку.

// Ошибка не будет обработана

new Promise(async () => {
  throw new Error('message');
}).catch(e => console.log(e.message));

(async () => {
  try {
    await new Promise(async () => {
      throw new Error('message');
    });
  } catch (e) {
    console.log(e.message);
  }
})();

Объединяя async-функцию с Promise, мы пытаемся вынести асинхронную логику из обещания, оставив его синхронным. Это работает, но не всегда.

Если же вам просто необходимо использовать именно асинхронную функцию, то обязательно добавляйте в нее try/catch для обработки ошибок вручную.

new Promise(async (resolve, reject) => {
  try {
    throw new Error('message');
  } catch (error) {
    reject(error);
  }
}).catch(e => console.log(e.message));


// с async/await
(async () => {
  try {
    await new Promise(async (resolve, reject) => {
      try {
        throw new Error('message');
      } catch (error) {
        reject(error);
      }
    });
  } catch (e) {
    console.log(e.message);
  }
})();

Ошибка #4. Немедленное выполнение промиса после создания

const myPromise = new Promise(resolve => {
  // код самого HTTP-запроса
  resolve(result);
});

В этом фрагменте мы поместили HTTP-запрос внутрь промиса.

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

somePromise().then(myPromise);

Но это не так. Функция, переданная в конструктор Promise, выполняется сразу же. То есть ваш HTTP-запрос запускается сразу же после создания обещания. В этом легко убедиться:

const myPromise = new Promise(resolve => {
  console.log('start request');
  // код самого HTTP-запроса
  resolve(result);
});

В консоли сразу же появится сообщение о начале выполнения запроса, хотя вы не вызывали myPromise.

Что же делать, если вы хотите отложить выполнение коллбэка промиса — выполнить запрос только тогда, когда он будет вам нужен.

У самих промисов нет встроенного способа сделать это, однако вы всегда можете обратиться к нативным методам JavaScript. Если нет способа отложить выполнение коллбэка промиса, то просто отложите создание этого промиса.

const createMyPromise = () => new Promise(resolve => {
  // HTTP-запрос
  resolve(result);
});

Это «ленивый» промис.

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

Если у вас есть несколько промисов, которые не зависят друг от друга, вы можете запустить их выполнение одновременно, а не последовательно, что позволит сэкономить много времени.

Для этого существует метод Promise.all().

Пример последовательного выполнения:

const sleep = delay => new Promise(res =>  setTimeout(res, delay))

async function f1() {
  await sleep(1000);
}

async function f2() {
  await sleep(2000);
}

async function f3() {
  await sleep(3000);
}

(async () => {
  console.time('sequential');
  await f1();
  await f2();
  await f3();
  console.timeEnd('sequential');  
})();

Этот код выполняется 6 секунд!

Выполнение последовательных вызовов заняло 6 секунд

Пример параллельного выполнения того же кода:

(async () => {
    console.time('concurrent');
    await Promise.all([f1(), f2(), f3()]);
    console.timeEnd('concurrent'); 
})();

В два раза быстрее, так как нам потребовалось дождаться только выполнения самой долгой функции f3:

Выполнение параллельных вызовов заняло 3 секунды

Надеюсь, эта статья была полезна и вы стали лучше понимать, как работают промисы в JavaScript.

make a promise разговорная английская фраза перевод

пообещать, дать обещание

1. I made a promise to myself that I will never go there again. / Я пообещал себе, что никогда больше туда не поеду.

2. Oh, and if you’re non-white you’re unhappy because promises were made but never fully kept, if at all. / И если ты не белый американец, ты несчастлив, потому что были даны обещания, но они не были выполнены полностью, если вообще были выполнены.

3. If you make a promise to yourself, you should commit to it. If you don’t feel committed to your promises, then you will never achieve any goals. / Если ты даёшь себе обещание, ты должен следовать ему. Если ты не чувствуешь, что ты можешь быть верным своему обещанию, тогда ты не достигнешь никаких целей.

swear out фразовый глагол перевод

дать торжественное обещание, поклясться

— Has it ever occured to you that she could look out your whole Internet history? / Тебе не приходило в голову, что она могла проверить всю твою историю в интернете?

— We’ve sworn out that stuff. So, it’s cool. / Мы поклялись этого не делать. Поэтому все круто.

Is that a promise? перевод «Обещаешь?»

— I can talk right now. I’ll call you later. / Я не могу говорить сейчас. Я позвоню позже.

— Is that a promise? / Обещаешь?

cross my heart and promise to die перевод «обещаю, клянусь»

— Promise not to tell anyone? / Обещаешь никому не говорить?

— Cross my heart and hope to die. / Обещаю.

Даю слово.

If I win ten grand, you walk out of here. You have my word. / Если я выиграю десять штук, ты выйдешь отсюда. Даю слово. (из фильма The Bounty Hunter)

promising перевод «обещающий, многообещающий»

This case is not very promising. There is not enough evidence of the suspect’s guilt. / Это дело не очень обещающее. Недостаточно улик вины подозреваемого.

keep one’s promise разговорная английская фраза

keep one’s promise перевод «сдержать слово»

Robert is a very reliable man. If he promises something, he always keeps him promises. / Роберт — очень надеждный человек. Если он что-то обещает, он всегда держит обещание.

break a promise это разговорная английская фраза

break a promise перевод «не сдержать обещание»

Sam is not a reliable guy. He always breaks his promises. / Сэм — ненадежный парень. Он никогда не сдерживает своих обещаний.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Candy holiday 104f коды ошибок
  • Candy holiday 1040 txt ошибка 3