繁体   English   中英

将参数传递给回调函数

[英]Passing parameters to a callback function

我想把头围在javascript回调函数上。 我尝试了以下代码:

var callbackTester = function(callback) {
  var tryMe = "Are you ready, ";
  callback(tryMe);
}

var createMessageHandler = function(client) {
  this.client = client;
  this.result = function(foo){
    console.log(foo + " "+ this.client);
  }
};

(new createMessageHandler("John")).result(callbackTester);

而不是显示“ Jason,您准备好了吗”,而是显示整个回调函数,并显示名称:

function (callback) {
  var tryMe = "Are you ready, ";
  callback(tryMe);
} John

有人可以帮助我了解如何解决此问题吗?

您的foo参数不是字符串,而是您需要调用的回调。 可能的解决方案之一是:

var callbackTester = function (callback) {
    var tryMe = "Are you ready, ";
    callback(tryMe);
};

var createMessageHandler = function (client) {
    this.client = client;
    this.result = function (foo) {
        foo(function (msg) {
            console.log(msg + " " + this.client);
        }.bind(this));
    }
};

(new createMessageHandler("John")).result(callbackTester);

介意.bind(this) -您需要执行此操作以从外部作用域保留this.client

有关bind功能的更多信息: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

注意:不过,我不太了解您的代码的用途。 您不进入回调地狱吗? 请尝试monads / promises。

new createMessageHandler不直观。 恕我直言,它应该是new MessageHandler()或只是createMessageHandler()

您定义了一个callbackTester函数,它以回调作为参数,因此您必须为其提供回调,否则它将永远无法工作。 另外,您必须return该回调。 否则,除了函数本身之外,您将一无所获。 这是一个解决方案:

var callbackTester = function(callback) {
    var tryMe = "Are you ready,";
    return callback(tryMe);
}

var createMessageHandler = function(client) {
    this.client = client;
    this.result = function(foo){
        console.log(foo + " "+ this.client);
    }
}

(new createMessageHandler("John")).result(callbackTester(function(phrase) { return phrase; }));
// Are you ready, John

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM