无法获得回调中设置的值

时间:2015-11-04 06:15:33

标签: javascript arrays

我在获取回调中设置的值时遇到问题。我最初调用获取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
    },

1 个答案:

答案 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实例。使用callapply方法使用正确的上下文调用回调,或者使用bind方法绑定到纠正上下文的回调应该可以解决问题。

否则,您可以传递GameState实例并调用gameState.callbackMethod()

根据前面的例子,它应该如下所示

function exec(instance) {
  instance.walk(); //context is Person {name: "someone"}
}
exec(p);