【问题标题】:Add an extra parameter to a callback function in Javascript在 Javascript 中为回调函数添加一个额外的参数
【发布时间】:2022-06-30 08:07:22
【问题描述】:

您好 Stackoverflow 用户,

许多像我这样的人都在寻找如何将额外的参数传递给回调函数。这些问题的标题相似,但实际上它们具有不同的挑战和许多解决方法。此外,分享实践以提高经验总是令人愉快的。

最近,我在我的 node js 项目中遇到了一个非常简单的挑战。我与之通信的其中一个 API 有一个同步工作的 SDK。而且我以前每次都传递回调函数(当您有相互依赖的请求并且需要在应用层内传输一些数据时,这很烦人)。

想象一下这样的计划付款流程,客户向服务器发送一个请求,其中包括所选计划和他的 ID。服务器 API 层收到请求数据后,会将其传递给第三方服务函数(.create(...))。第三方服务函数接收到一个带有2个参数function(err, plan_document)的回调。然后,回调应该通过请求中的 ID 将选定的计划逻辑应用到客户端。

** 我们需要将客户端和计划的数据传递给回调函数以应用逻辑。第三方服务向回调提供了一个 plan_document 参数,我们仍然需要以某种方式将客户端 id 从 API 层传递给服务。

代码将如下所示。

const create_plan_agreement = (req, res) => {
    // some code
    var client_id = req.auth.client_id;
    third_party.plan_agreement.create({}, update_plan_agreement);
};
const update_plan_agreement = (err, plan_document, client_id) => {
    /* 
        The third-party `third_party.plan_agreement.create` function passes the first 
        two parameters and somehow we need to add the client_id 
    */
    console.log('client plan activated');
    active_client_plan(plan_document, client_id);
};

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    我们需要将回调函数绑定到一个对象,以便它可以访问对象的属性。

    将函数绑定到包含您需要以这种方式传输的数据的对象:

    third_party.plan_agreement.create(request_data, update_plan_agreement.bind({'client_id': client_id})); 
    

    删除client_id参数并从this.client_id中读取它,该参数引用绑定函数生成的对象:

    const update_plan_agreement = (err, plan_document) => {
        /* this.client_id will */
        this.client_id && active_client_plan(plan_document, this.client_id);
    };
    

    为简单起见,我将分步描述绑定函数的工作原理。

    • 它将生成一个与您传递的对象类似的对象。
    • 将您的函数作为方法添加到对象并从该对象运行。

    希望它对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 2021-11-09
      • 2012-10-25
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      相关资源
      最近更新 更多