Как использовать в колбеке результат функции, в которую он передается js

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

Есть такой псевдокод:

const callback = (data) => {
  if(valid(data){
    save(data)
    win.close()
  } else {
    alert('данные не валидны')
  }
}

const win = openWin(data, callback)

То есть в колбеке функии openWin используется результат этой функции. При таком использовании пишет ошибку

cannot access variable before initialization

хотя колбек не может вызваться до того как переменная win будет инициализирована.

Если объявить win перед колбеком var или let, а потом установить, в колбеке win захватывается как undefined.

Как правильно поступить в такой ситуации, чтобы получить доступ к результату функции в колбеке?

Минимальный рабочий пример:

const openWin = (data, callback) => {
  setTimeout(()=>{
    callback(data+1)
  }, 1000)

  return {
    close(){console.log('method close was called')}
  }
}

const callback = (data) => {
  if(data > 1){
    // здесь надо получить доступ к win
    win.close()
  } else {
    alert('data is invalid')
  }
}

const win = openWin(1, callback)

Ответы

▲ 0

Как использовать в колбеке результат функции, в которую он передается

Например вот так...

const openWin = (data, callback) => {
  const res = {
    close() {
      console.log('method close was called')
    }
  }
  setTimeout(() => {
    callback(data + 1, res)
  }, 1000)

  return res
}

const callback = (data, res) => {
  if (data > 1) {
    // тут можно использовать res
    res.close()
  } else {
    alert('data is invalid')
  }
}

const win = openWin(1, callback)