我在获取回调中设置的值时遇到问题。我最初调用来获取任务数据,然后在任务数据返回后调用game.state.setNPCs。
我想在设置后获取 NPC 对象,但是即使 setNPCs()
似乎正在设置数组,但 get 返回一个空数组。
你可以在下面看到,在callback
设置result.npcs
之后,我注销了getNPCs()
,它是一个空数组。
更奇怪的是,我在设置值后从 GameState
对象中调用 game.state.getNPCs()
,但它仍然是一个空数组。
编辑:我发现是否将 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
}
});
},
游戏状态对象:
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
},
最佳答案
我做了一个小演示来测试这个问题。
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
绑定(bind)到正确的上下文方法应该可以解决问题。
否则,您可以传递 GameState
实例本身并调用 gameState.callbackMethod()
根据前面的示例,它应该如下所示
function exec(instance) {
instance.walk(); //context is Person {name: "someone"}
}
exec(p);
关于javascript - 无法获取回调中设置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33514928/