Импорт функции в другом файле

Рейтинг: 2Ответов: 1Опубликовано: 23.08.2023

Внимание!!! Благодаря ссылки вопрос решен, спасибо ksa

Если коротко, то

в файле First.js

function curry(f) {
    return function (a) {
        return function (b) {
            return f(a, b);
        }
    }
}

let foo = curry(onAuthStateChanged);
let foo1 = foo(auth);

export { foo1 }

------------------------------------

в файле Second.js

import { foo1 }

foo1(user => {
   console.log(user); ---> значение user
})

Есть функция, которая импортируется из firebase-auth через CDN. Она показывает авторизован ли тек. пользователь или нет.

В одном файле, назовем его, First.js я ее импортирую, пар-р auth - инициализация сервиса аутен-ции.

onAuthStateChanged(auth, (user)=>{
   if (user) {
      ...что-то делаю...
   } else {
      ...что-то делаю...
   }
})

Вопрос в том, могу ли я как то экспортировать эту функцию уже со вставленным параметром auth?

Что я делал:

  • Первое
const foo = onAuthStateChanged;

export { foo }

В файле Second.js

import { foo } from "./First.js"
import { auth } from "./init.js"

foo(auth, (user)=>{

})

Это работает, но я не хочу тянуть auth из init.js

  • Второе
const foo = onAuthStateChanged(auth);

export { foo }

В файле Second.js

import { foo } from "./First.js"

foo((user)=>{

})

Это не работает выдает ошибку

Прошу помощи у сообщества знающих людей.

Ответы

▲ 1Принят

могу ли я как то экспортировать эту функцию уже со вставленным параметром auth?

Предложу вариант с каррированием функции onAuthStateChanged..

Если ее обернуть вот такой "оберткой" - можно будет "вставить" первый аргумент и уже эту полученную функцию можно будет экспортировать.

Надеюсь комментарии в коде показывают что и как использовать.

//
function onAuthStateChanged(auth, cb) {
  if (auth) console.log('auth есть')
  if (cb) console.log('cb есть')
}

let foo = curry(onAuthStateChanged)

// готовим "экспортную" функцию
foo = foo('auth')
// вот тереть это можно экспортировать

// применим закаррированое foo
foo('user')


//
function curry(func) {
  return function curried(...args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
      return function(...args2) {
        return curried.apply(this, args.concat(args2));
      }
    }
  }
}