【问题标题】:Refactoring javascript callbacks - function out of namespace重构javascript回调-命名空间之外的函数
【发布时间】:2020-08-17 20:40:21
【问题描述】:

我有一个像这样的 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 的唯一方法是什么?

谢谢大家!

【问题讨论】:

    标签: javascript node.js express parameters callback


    【解决方案1】:

    您需要将 par1 提供给 function c() 作为参数。否则没有办法让它变得干净

    【讨论】:

    • 该死的,谢谢。是否可以使用“预填充”参数传递回调函数?像这样: `function callback(a,b){} function a(par1) { call(callback(b=par1)) } function call(callback) { callback(a=4) } ` 因为如果不是,我想我知道在下一个 js 更新中要实现什么 lol
    • 确定是的。查看developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - “部分应用函数”部分
    【解决方案2】:

    你可以使用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));

    【讨论】:

      猜你喜欢
      • 2017-10-24
      • 1970-01-01
      • 2016-01-16
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 2015-03-02
      相关资源
      最近更新 更多