我试图把我的头放在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有人能帮我弄清楚怎么解决这个问题吗?
发布于 2014-10-20 07:40:25
您的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函数的更多信息:Objects/Function/bind
注意:不过,我不太明白您代码的目的。你不是要进入回调地狱吗?试一试单子/承诺。
new createMessageHandler不是直观的。它应该是new MessageHandler()或者只是createMessageHandler()
发布于 2014-10-20 07:42:18
您定义了一个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, Johnhttps://stackoverflow.com/questions/26460534
复制相似问题