Посмотрите на две завершающие скобки:
(async (x) => {
console.log(x)
})() <--
Вы выполняете функцию так, как вы ее объявили.Это так называемое IIFE
: выражение вызова немедленно вызванной функции .
Давайте разделим экспорт, добавив переменную:
const result = (async (x) => {
console.log(x)
})();
export default result;
Каково значение результата?Ну, значение результата равно возвращаемому значению функции.Если это была нормальная функция, она была бы равна функции, которая сразу же была бы разрешена как undefined
.Поскольку это асинхронная функция, и мы ничего не возвращаем, это означает, что возвращаемое значение равно Promise
из undefined
.
Итак, то, что вы экспортируете, это уже решенное обещание!Но ... как насчет параметра x?
Ну, функция принимает параметр x
, но вы фактически ничего не передаете.Посмотрите снова на завершающие скобки, внутри ничего нет, поэтому вы увидите undefined
в консоли, если вы выполните код.
Если вместо этого вы передали аргумент, например строку, вы увидели эту строку:
(async (x) => {
console.log(x) // It prints banana!
})('banana')
Итак, вот точка, в которой вам нужно передать аргумент, затем немедленно вызывается функция и экспортируется результат.
Давайте перепишем colorTheme.ts
более простым способом:
1.Добавьте переменную
const result = (async (x) => {
console.log(x)
})();
export default result;
2.Возврат undefined
(это не возврат)
const result = (async (x) => {
console.log(x)
return undefined;
})();
export default result;
3.Используйте Promise
вместо async
const result = (x => {
console.log(x)
return Promise.resolve(undefined);
})();
export default result;
4.Не вызывайте функцию немедленно
const f = function (x) {
console.log(x)
return Promise.resolve(undefined);
}
const result = f(undefined);
export default result;
Итак, это в основном то, что вы экспортировали.Теперь вам нужно исправить это в соответствии с тем, что вы хотите получить!