javascript - 无法获取回调中设置的值

标签 javascript arrays

我在获取回调中设置的值时遇到问题。我最初调用来获取任务数据,然后在任务数据返回后调用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/

相关文章:

javascript - 将谷歌我的地点 map 中的数据添加到自定义谷歌地图

javascript - 使用innerHTML (JS)插入选择元素

javascript - 从托管在不同域上的 &lt;iframe&gt; 访问文档的文本

python - 如何在Python中将打印的控制台输出保存到pandas数据帧?

c - 为什么数组在函数中用作局部变量时不会在堆栈方向上增长?

Java 将 Arraylist<Float> 转换为 float[]

javascript - 如何使用javascript合并2个数组?

javascript - 具有未知长度的数据结构

Javascript:根据多个值过滤对象数组

javascript - 有条件地创建内容的 Angular Directive(指令)