Я хочу экспортировать другой пакет из пользовательского модуля на основе выражения
const settings = {}
const init = (sentry) => {
sentry.init(settings)
return sentry
}
const pkg = async () => {
let mod
if (__CLIENT__) {
mod = await import('@sentry/browser').then(init)
} else {
mod = await import('@sentry/node').then(init)
}
return mod
}
const Sentry = pkg()
console.info({ Sentry })
export default Sentry
Однако, когда я импортирую этот файл позже, я получаю ожидающее обещание
import Sentry from 'config/sentry'
console.info(Sentry) // -> promise pending
Можно ли по умолчанию экспортировать динамически импортированный модуль на верхний уровень?
В итоге я выбрал require вместо динамического импорта, что поддерживается настройкой webpack globals в моей системе.
const Sentry = __CLIENT__ ? require('@sentry/browser') : require('@sentry/node')
Вы не получаете ошибку await можно использовать только внутри асинхронной функции?
да, извините, позвольте мне обновить код, чтобы он был асинхронным
Нет, нельзя - без ожидание верхнего уровня.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Асинхронные функции всегда возвращают обещание. Это по определению. Поскольку динамический импорт также возвращает промисы (и является асинхронным), вы не можете их экспортировать, так как экспорт должен быть на верхнем уровне скрипта. Лучшее, что вы можете сделать, это экспортировать промис и включить обработчик .then в любой скрипт, который его импортирует; так как вы возвращаете mod из своей асинхронной функции, она будет передана в параметр обработчика .then для использования там.