Codewars задача, javascript?

А помогите решить странную и необычную задачу для яваскрипта?

https://www.codewars.com/kata/how-can-i-throw-an-e...

нужно бросить ошибку с текстом, но НЕЛЬЗЯ использовать объект Error, нельзя использовать eval()
eval('throw new Error()')
// так нельзя

нельзя использовать конструктор функции
new Function('thr' + 'ow new Error()')
// кстати слово throw тоже нельзя использовать


Есть подозрение, что надо как-то реджектить промис, и не ловить reject в блоке catch, чтобы ошибка пробросилась дальше, но функция не вызывается асинхронно и поэтому не ждет и возвращает undefined
function bang(){

  (async function(){
    const e = await Promise.reject("Just th" + "row like this!")
    return e
  })()
  // undefined И ПОТОМ бросает нужную ошибку
  // самое близкое к решению, докуда я смог подобраться
}


function bang(){

  return (async function(){
    const e = await Promise.reject("Just th" + "row like this!")
    return e
  })()
  // а так возвращает Promise {<rejected>:
  // но не ошибку
}


что еще? как еще?
  • Вопрос задан
  • 1181 просмотр
Решения вопроса 3
@StockholmSyndrome
Роман правильно предложил изменить сообщение ошибки, теперь просто throw'им её с помощью генератора:
function bang() {
  try {
    ({}).a();
  } catch(e) {
    e.message = "Just thr" + "ow like this!";
    (function* () {})()['thr' + 'ow'](e);
  }
}
Ответ написан
rockon404
@rockon404
Frontend Developer
v1:
process.emit('error', new this['Err' + 'or']('Just th' + 'row like this!'));


v2:
const err = this['Err' + 'or'];
const gen = (function* () {})();
const mtd = 'th' + 'row';
gen[mtd](new err('Just th' + 'row like this!'));


В браузерном окружении, так еще можно сделать:
window.onerror = (...args) => {
  args[4].message = 'Just th' + 'row like this!';
};

x();
Ответ написан
bingo347
@bingo347
Бородатый программер
['Just th'+'row like this!',m=>new this['Er'+'ror'](m),'th'+'row',function*(){},function(){this[3]()[this[2]](this[1](this[0]))}][4]()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы