Size: a a a

🐘PHPStorm TIPS & TRICKS

2020 December 22

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
а куда ты дела знак доллара?
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
или это js?
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
синтаксис PHP просто
источник

SB

Sergio Baquemetti in 🐘PHPStorm TIPS & TRICKS
Aleksandr baltazor
а куда ты дела знак доллара?
🤦🏻‍♂️
источник

SB

Sergio Baquemetti in 🐘PHPStorm TIPS & TRICKS
Станислав Квятковский
Выручайте, компрады, как лечить это ненастье?
В другом месте помогло обвернуть это всё ещё и в new Promise с обработкой его catch, хотелось бы без таких костылей. Есть идеи?)
а зачем try-catch нужен. Почему не просто
return new Error(...) ?
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Sergio Baquemetti
а зачем try-catch нужен. Почему не просто
return new Error(...) ?
Потому что будет то же самое: будет сообщение о брошенной и не словленной ошибке. Это уже костыль, который, увы, не работает, зато показывает бредовость этой ситуации
источник

YK

Yuri Kizilov in 🐘PHPStorm TIPS & TRICKS
Станислав Квятковский
Выручайте, компрады, как лечить это ненастье?
В другом месте помогло обвернуть это всё ещё и в new Promise с обработкой его catch, хотелось бы без таких костылей. Есть идеи?)
Если тебе нужно выкинуть исключение то throw new Error(...), если ты создаешь объект ошибки и возвращаешь его тогда да return new Error(...), но потом нужно будет все равно вызвать throw error (это твой объект ошибки)
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Так ошибка пропадает, однако это уже какой-то быдлокод, а не решение)
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Yuri Kizilov
Если тебе нужно выкинуть исключение то throw new Error(...), если ты создаешь объект ошибки и возвращаешь его тогда да return new Error(...), но потом нужно будет все равно вызвать throw error (это твой объект ошибки)
Знаю, в этом и цель)
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Yuri Kizilov
Если тебе нужно выкинуть исключение то throw new Error(...), если ты создаешь объект ошибки и возвращаешь его тогда да return new Error(...), но потом нужно будет все равно вызвать throw error (это твой объект ошибки)
Это исключение должно потом обработаться корректно, от того и создаётся объект-одиночка ошибки
источник

SB

Sergio Baquemetti in 🐘PHPStorm TIPS & TRICKS
Покажи пример где ты вызываешь createError()
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Sergio Baquemetti
Покажи пример где ты вызываешь createError()
const SOME_ERROR = createError('SOME_ERROR')
источник

SB

Sergio Baquemetti in 🐘PHPStorm TIPS & TRICKS
ок. дальше \
источник

SB

Sergio Baquemetti in 🐘PHPStorm TIPS & TRICKS
где ты вызываешь SOME_ERROR
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Sergio Baquemetti
ок. дальше \
А дальше это всё в асинхронном декораторе. Создаётся ошибка на этапе изменения дескриптора, а выброситься может во время вызова декорируемого метода, однако в этом же декораторе и должна ловиться
источник

SB

Sergio Baquemetti in 🐘PHPStorm TIPS & TRICKS
ну то есть,
throw SOME_ERROR ?
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Sergio Baquemetti
ну то есть,
throw SOME_ERROR ?
function stoppable (target, key, descriptor) {
 const STOP_ERROR = createError('STOP_ERROR')
 let queue = Promise.resolve()
 let lockedQueue = Promise.resolve()

 const decoratedDescriptor = Object.assign({}, descriptor, {
   value: function (...args) {
     return queue = queue
       .then(() => descriptor.value.apply(this, args))
       .catch((reason) => {
         if (reason !== STOP_ERROR) {
           console.log('Skip error in @stopabble', reason)
           throw reason
         } else {
           console.log('Catch error in @stoppable', reason)
         }
       })
   },
 })

 Object.defineProperties(decoratedDescriptor.value, {
   start: {
     proto: null,
     value: () => {
       queue = lockedQueue
     },
   },
   stop: {
     proto: null,
     value: () => {
       lockedQueue = queue
       queue = Promise.reject(STOP_ERROR)
     },
   },
 })

 return decoratedDescriptor
}
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Станислав Квятковский
function stoppable (target, key, descriptor) {
 const STOP_ERROR = createError('STOP_ERROR')
 let queue = Promise.resolve()
 let lockedQueue = Promise.resolve()

 const decoratedDescriptor = Object.assign({}, descriptor, {
   value: function (...args) {
     return queue = queue
       .then(() => descriptor.value.apply(this, args))
       .catch((reason) => {
         if (reason !== STOP_ERROR) {
           console.log('Skip error in @stopabble', reason)
           throw reason
         } else {
           console.log('Catch error in @stoppable', reason)
         }
       })
   },
 })

 Object.defineProperties(decoratedDescriptor.value, {
   start: {
     proto: null,
     value: () => {
       queue = lockedQueue
     },
   },
   stop: {
     proto: null,
     value: () => {
       lockedQueue = queue
       queue = Promise.reject(STOP_ERROR)
     },
   },
 })

 return decoratedDescriptor
}
Сам исходник декоратора
источник

YK

Yuri Kizilov in 🐘PHPStorm TIPS & TRICKS
Это порнография if (reason !== STOP_ERROR) {

Наследуй объект ошибки и сравнивай instanceof
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Yuri Kizilov
Это порнография if (reason !== STOP_ERROR) {

Наследуй объект ошибки и сравнивай instanceof
Это не ES с классами, в этом ES это нормальное решение
источник