失去上下文与parse.com javascript SDK

Losing context with parse.com javascript SDK

本文关键字:javascript SDK com parse 上下文 失去      更新时间:2023-09-26

我这样做的目的是将对象数组存储在对象字面量中以供以后引用。我在一个让我感到困惑的地方失去了上下文(如果这是正确的术语的话)。下面是代码:

HuntObject = {
        // Data.hunts gives collection
        Data: {},
        fetchCollec: function(){
            var self = this;
            var huntObj = new Parse.Query(huntObject);
            huntObj.find({
                success: function(results){
                    var hunts = [];
                    for(i in results){
                        hunts.push(i);
                    }
                    console.log(self);
                            //Here self references HuntObject
                    self.Data = hunts;

                },
                error: function(e){
                    console.log(e.message);
                }
            });
            console.log(self);// Here self references HuntObject 
                            console.log(self.Data); // empty

因此,在我的console.log语句中,我想要的正确上下文被引用,并且在最后一次对self的日志调用中,我甚至可以在控制台中看到数据对象现在在其中有一个对象数组。但一旦我试图引用那个数组,我就会得到一个空对象。我尝试以不同的方式分配数组,如self。data。array = hunts。我还尝试将Data设置为这样的方法。

Data: (function(){
        return {
            array: []
        }
     }());

我想也许我对不同情况下上下文变化的理解是相当弱的,所以很高兴解决我最初的目标,但更重要的是,我想更好地理解上下文,为什么我的实现在这种情况下失败?

这不是作用域或上下文问题,您正在处理您的self变量。

我猜Parse.Query异步。所以console.log 必须在成功函数内;在调用Parse.Query之后立即在代码中执行此操作,调用它太快(在查询完成之前)。

:

huntObj.find({
    success: function (results) {
        var hunts = [];
        for (i in results) {
            hunts.push(i);
        }
        console.log(self);
        //Here self references HuntObject
        self.Data = hunts;
        // *********** Move these here
        console.log(self); // Here self references HuntObje
        console.log(self.Data); // Not empty anymore
    },
    error: function (e) {
        console.log(e.message);
    }
});
// Any code here runs after you've *started* the query, but
// before it *completes*