[英]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.