我试图绕过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
有人可以帮我理解如何解决这个问题吗?
答案 0 :(得分:0)
您的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/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
注意:我不太了解您的代码的目的。 Aren你进入了一个回调地狱吗?尝试monads / promises。
new createMessageHandler
并不直观。恕我直言,它应该是new MessageHandler()
或createMessageHandler()
答案 1 :(得分:0)
你定义了一个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