Получите оригинальное имя функции из обещания. - PullRequest
0 голосов
/ 11 октября 2018

У меня есть функция, которая возвращает обещание, как это.Из обратного вызова обещания (.then или .catch я хочу найти имя исходной функции ("myFunction"). Как я могу это сделать?

function myFunction() {
  return fetch('https://example.com')
    // The promise will fail because Stackoverflow is sandboxed
    .catch(function() {
      console.log(JSON.stringify(arguments.callee.name))
      // It is returning the name of my anonymous function ("").
      // I want it to log "myFunction" instead.
    })
}

myFunction();

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

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

Уже есть хороший ответ от choz, объясняющий, как это сделать в свободном режиме и старых средах.

Это можно получить из трассировки стека с помощью асинхронногостек трассировки при использовании асинхронных функций (с помощью new Error().stack), который гарантированно работает и является будущим.Однако не планируется разрабатывать трассировки асинхронного стека для обещаний, если не использовать асинхронное ожидание и трассировки асинхронного стека для производства, буквально попавшего в V8 на прошлой неделе, поэтому потребуется некоторое время, прежде чем его можно будет использовать.

Если вы используетеBabel или TypeScript также возможно сделать с помощью преобразования кода и плагина.

0 голосов
/ 11 октября 2018

Вы можете просто сохранить arguments в другой переменной вне закрытия перехвата.

function myFunction() {
  let args = arguments;
  return fetch('https://example.com')
    // The promise will fail because Stackoverflow is sandboxed
    .catch(function() {
      console.log(JSON.stringify(args.callee.name))
      // It is returning the name of my anonymous function ("").
      // I want it to log "myFunction" instead.
    })
}

myFunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...