Рефакторинг javascript обратных вызовов - функция вне пространства имен - PullRequest
1 голос
/ 03 мая 2020

У меня есть функция Javascript, например, так:

function a(par1) {
    fun.doSth(function(par2) {
        another.doSth(function() {
           //par1 is needed here
        })
    })
}

Теперь она работает так, и я могу получить доступ к par1 в этом втором обратном вызове. Но я хочу немного реорганизовать и сделать две анонимные функции именуемыми функциями для удобства чтения

function a(par1) {
    fun.doSth(b)
}

function b(par2) {
    another.doSth(c)
}

function c() {
    //par1 is needed here
}

Но теперь par1 больше не доступен, я думаю, потому что c выходит за рамки a? Является ли единственный способ исправить эту передачу par1 через эти функции в качестве параметра?

Спасибо вам всем!

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Вы можете использовать currying:

function doSomething1(cb1) {
    cb1(1);
}

function doSomething2(cb2) {
    cb2(2);
}

function a(par1) {
    doSomething1(b(par1))
}

function b(par1) {
    return function (par2) {
        doSomething2(c(par1))
    }
}

function c(par1) {
    return function c(arg) {
        console.log('arg: ', arg, 'par1: ', par1);
    }
}

console.log(a(0));
0 голосов
/ 03 мая 2020

Вы должны предоставить par1 до function c() в качестве аргумента. В противном случае его невозможно очистить

...