解析云代码未响应错误或承诺成功

问题描述:

我的解析云代码未响应错误或成功。它只是超时,我不知道我做错了什么。它应该在不同的表格中保存多个值,并向用户发送推送消息。解析云代码未响应错误或承诺成功

推送消息和用户表被调整并发送,但街道和分类帐对象未被正确保存。此外,响应没有被调用。

我在过去工作过(或者我只是幸运的)。任何想到我做错了什么?

var buyerId = request.params.buyerid; 
    var sellerName = request.params.sellername; 
    var streetId = request.params.streetid; 
    var amount = request.params.amount; 
    var pushMessageTemplate = request.params.pushMessage; 

    var log = request ? request.log : console; 
    var Streets = Parse.Object.extend('SHStreets'); 
    var streetQuery = new Parse.Query(Streets); 
    streetQuery.equalTo("objectId", streetId); 
    streetQuery.first({ 
    useMasterKey: true, 
    success: function (street) { 
     var streetName = street.get("name"); 

     var query = new Parse.Query(Parse.User); 
     query.equalTo("objectId", buyerId); 
     query.first({ 
     useMasterKey: true, 
     success: function (user) { 
      var promises = []; 
      var now = new Date(); 

      var buyerName = user.get("username"); 
      // Set and save the change 
      user.set("balance", user.get("balance") - amount); 
      user.set("streets", user.get("streets") + 1); 

      street.set("current_owner", user); 
      street.set("owned_since", now); 
      street.set("for_sale", false); 
      street.set("price_bought", amount); 

      var acl = new Parse.ACL(); 
      acl.setPublicReadAccess(true); 
      acl.setWriteAccess(user, true); 
      street.setACL(acl); 

      //update ledger 
      var Ledger = Parse.Object.extend("Ledger"); 
      var ledger = new Ledger(); 

      ledger.set("type", "buy"); 
      ledger.set("amount", amount); 
      ledger.set('ledger_time', now); 
      ledger.set("user", user); 
      ledger.set("description", "x"); 

      promises.push(Parse.Object.saveAll([street, user, ledger], { useMasterKey: true })); 

      // Find users with a given email 
      var userQuery = new Parse.Query(Parse.User); 
      userQuery.equalTo("objectId", user.id); 

      var pushQuery = new Parse.Query(Parse.Installation); 
      pushQuery.exists("user"); // filter out installations without users 
      pushQuery.include('user'); // expand the user pointer 
      pushQuery.matchesQuery("user", userQuery); 

      // Send push notification to query 
      promises.push(Parse.Push.send({ 
      where: pushQuery, // Set our installation query 
      data: { 
       alert: _.template(pushMessageTemplate)({ 
       sellername: sellerName, 
       streetname: streetName, 
       amount: amount 
       }) 
      } 
      }, { 
       useMasterKey: true, 
      })); 

      return Parse.Promise.when(promises).then(function() { 
      response.success("success"); 
      }); 
     }, 
     error: function (error) { 
      log.error('buy-street error', error.message); 
      response.error("Uh oh, buy request success failed." + error.message); 
     } 
     }); 
    }, 
    error: function (error) { 
     log.error('buy-street error', error.message); 
     response.error("Uh oh, buy request success failed." + error.message); 
    } 
    }); 

我错过了承诺返回的函数错误。

return Parse.Promise.when(promises).then(function() { 
    // Set the job's sucess status 
    response.success('success'); 
},function(error) { 
    response.error(error); 
}); 

它看起来像你的第一个查询的成功函数不返回任何东西:

streetQuery.first({ 
useMasterKey: true, 
success: function (street) { // this function doesn't return anything 
    // ... 
    query.first({ // You probably want to return this promise 
    useMasterKey: true, 
    success: function (user) { // this is the function that you're returning to 
     // ... 
     return Parse.Promise.when(promises).then(function() { 
     response.success("success"); 
     }); 
    }, 
    }); 
} 

});

如果您没有return语句,则Javascript将默认返回undefined

+0

感谢您的回复,我真的不得到什么在你的答案不同,我是回'Parse.Promise.when(承诺)。然后(函数()'吧? – Lengo

+0

的代码我答案与你的相同,只是突出兴趣点。“你可能想要返回这个承诺”的行应该是'return query.first({' – adamdport

+0

@Lengo是否有意义? – adamdport