我正在使用Parse创建WebApp,并且尝试使用以下代码获取对象Product的实例:

getProduct: function() {
   var productClass = Parse.Object.extend("Product");
   var query = new Parse.Query(productClass);
   var result = query.get(productId, {
       success: function(object) {
          console.log(object.get("productName"));
       },
       error: function(object, error) {
           ...
       }
   });
   return result;
}


我得到:

result.get is not a function


仅打印对象,我意识到我没有得到Product,而是在控制台(Safari)中得到的:

[Log] Object (views.js, line 269)
_rejected: false
_rejectedCallbacks: Array[0]
_resolved: true
_resolvedCallbacks: Array[0]
_result: Arguments[1]
__proto__: Object


我尝试了很多方法,但无法检索Product对象及其属性。我究竟做错了什么?

编辑

我要添加我的Products View

window.app.Products = Parse.View.extend({

    template: _.template($('#products-template').html()),

    el: $('body'),
    content: $('#content'),

    ...

    initialize: function() {
        _.bindAll(this, 'render');
        this.render();
    },

    render: function () {
        $(this.content).html(this.template);
        return this;
    },

    ...

    getUser: function() {
        return Parse.User.current();
    },

    getUserProduct: function() {
        var promise = new Parse.Promise();

        var productClass = Parse.Object.extend("Product");
        var query = new Parse.Query(productClass);
        query.equalTo("objectId", this.getUser().get("product").id);
        query.first().then(function(result) {
            if(result){
                // If result was defined, the object with this objectID was found
                promise.resolve(result);
            } else {
                console.log("Product was not found");
                promise.resolve(null);
            }
        }, function(error){
            console.error("Error searching for Product. Error: " + error);
            promise.error(error);
        });

        return promise;
    },

    setProduct: function() {
        this.getUserProduct().then(function(result) {
            if(result){
                console.log(result.get("productName"));
                var productName = result.get("productName");

            } else {
                console.log("Could not set Product");
            }
        }, function(error){
            console.log("Error: " + error);
        });
    }
});


我正在尝试通过列出参数并将其更新为:

info: {
         user: '...',
         product: '...'
      }


然后将其传递给template

$(this.content).html(this.template(this.info));


但是我无法更新product

最佳答案

在撰写本文时,我意识到您实际上并没有通过将产品搜索引入自己的方法来节省太多代码。我希望它至少将向您展示如何创建和调用自己的自定义异步方法。例如,您可能有一个比当前查询复杂得多的查询,或者它可能在找到所需的响应之前执行了多个查询,在这种情况下,有必要将其放入自己的方法中。

获取产品异步方法

此方法使用给定的objectID检索产品

var getProduct =  function(productId) {
    var promise = new Parse.Promise();

    var Product = Parse.Object.extend("Product");
    var query = new Parse.Query(Product);
    query.equalTo("objectId",productId);
    query.first().then(function(result){
        if(result){
            // If result was defined, the object with this objectID was found
            promise.resolve(result);
        } else {
            console.log("Product ID: " + productId + " was not found");
            promise.resolve(null);
        }
    }, function(error){
            console.error("Error searching for Product with id: " + productId + " Error: " + error);
            promise.error(error);
    });

    return promise;
}


呼叫方式

调用上述方法的简单方法的示例。

var myMethod = function(){
    var productID = "12345678";

    getProduct(productID).then(function(result){
        if(result){
            console.log(result.get("productName"));
            var productName = result.get("productName");
            var productPrice = result.get("productPrice");
            // Now that you have some relevant information about your product
            // you could render it out to an Express template, or use this
            // value in a calculation etc.
        } else {
            console.log("Product with objectId: " + productID + " was not found");
        }
    }, function(error){
        console.log("Error: " + error);
    });

}


笔记


由于这些方法是异步的,因此没有实际数据
以“返回值”返回(该方法返回承诺)。
相反,我们根据承诺返回相关数据(其中
您会看到promise.resolve(XXX)
拥有一个没有任何意义
此Node.js样式体系结构中的可变全局变量。

09-28 12:52
查看更多