Это популярная проблема, все пытаются с ней бороться, придумывают разные инструменты, библиотеки и прочее. Но скажу, что при хорошей архитектуре вложенность функций редко переваливает за 2 штуки - а это уже никакой не `хэл`. Ну вот посмотрите на метод в котором у вас этот самый `хэл`. Это же явное нарушение SOLID - один метод обрабатывает данные, куда-то их посылает, ждет в коллбэке ответ, с ним что-то делает, потом снова вызывает другую асинхронную функцию и опять ждет ответ, и так несколько раз. Поэтому `коллбэк хэл` - это классная штука, которая помогает разбивать код на независимые функции - принял данные, что-то сними сделал, отправил дальше как эти данные, так и другие аргументы. Точка.
document.body.insertAdjacentHTML('beforeend', '<iframe hidden />');
var originalWin = window.frames[window.frames.length - 1],
originalKeys = Object.keys(originalWin);
var globals = Object.keys(window).filter(x => originalKeys.indexOf(x) === -1);
<link rel="search" type="application/opensearchdescription+xml" title="Site Search" href="http://mysite.com/SearchEngineInfo.xml" />
<?xml version="1.0" encoding="utf-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>Site Search</ShortName>
<Description>The search engine</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image type="image/x-icon" width="16" height="16">mysite.com/favicon.ico</Image>
<Url type="application/opensearchdescription+xml" rel="self" template="http://mysite.com/SearchEngineInfo.xml" />
<Url type="application/atom+xml" template="http://mysite.com/search?q={searchTerms}&p={startPage?}" />
<Url type="text/html" template="http://mysite.com/search?q={searchTerms}&p={startPage?}" />
<moz:SearchForm>mysite.com/search</moz:SearchForm>
</OpenSearchDescription>