我在获取回调中设置的值时遇到问题。我最初调用获取Quest数据,然后在任务数据返回后调用game.state.setNPCs
。
我想在设置后获取NPC对象,但即使setNPCs()
似乎正在设置数组,get也会返回一个空数组。
您可以在callback
设置result.npcs
之后看到下面的内容,我注销getNPCs()
,它是一个空数组。
更奇怪的是,我在设置值后从game.state.getNPCs()
对象中调用GameState
,但它仍然是一个空数组。
编辑:我发现是否将game.state.getNPCs
作为回调传入初始回调setNPCs()
,如下所示:
callback(result.npcs, game.state.getNPCs);
然后这可行...但我不想传递另一个回调。见下文。
使用game.state.setNPCs
回调进行初始通话:
Utilities.game.quest.getQuestData({ id : stat.quest_id }, game.state.setNPCs);
调用getQuestData:
getQuestData : function (params, setNPCcallback) {
API.Quest.getQuestData(params).done(function (result) {
if (game.state) {
game.state.setQuest(result); //Object received successfully
setNPCcallback(result.npcs, game.state.getNPCs);
console.log('NPCs', game.state.getNPCs()); //Empty array
}
});
},
GameState对象:
var GameState = function(args) {
this.npcs = [];
...
};
GameState.prototype = {
constructor : GameState,
getNPCs : function () {
console.log(this.npcs); //Empty array
return this.npcs;
},
setNPCs : function (npcsArray, getNPCcallback) {
this.npcs = npcsArray;
console.log(this.npcs); //Contains Object
console.log(game.state.getNPCs()); //Empty array
console.log(getNPCcallback()); //Contains Object
},
答案 0 :(得分:1)
我制作了一个小型演示来测试这个问题。
var Person = function () {
this.name = "someone";
}
Person.prototype.walk = function () {
console.log(this)
};
var p = new Person;
function exec(callback) {
callback(); //context is Window
callback.call(p); //context is Person {name: "someone"}
}
p.walk(); //context is Person {name: "someone"}
exec(p.walk);
当您从getQuestData
调用回调时,上下文不是GameState
实例。使用call
或apply
方法使用正确的上下文调用回调,或者使用bind
方法绑定到纠正上下文的回调应该可以解决问题。
否则,您可以传递GameState
实例并调用gameState.callbackMethod()
根据前面的例子,它应该如下所示
function exec(instance) {
instance.walk(); //context is Person {name: "someone"}
}
exec(p);