简体   繁体   English

解析嵌套的.each查询的云代码

[英]Parse cloud code nested .each query

tI'm a few days stuck with my following code in Parse Cloud. 我花了几天的时间在Parse Cloud中使用下面的代码。 I know i'm doing the nested query wrong, but tried a lot and still doesn't get it working. 我知道我在做嵌套查询错误,但是尝试了很多,但仍然无法正常工作。

The first code is working, but the ledger object is not created. 第一个代码有效,但是未创建分类帐对象。

Should i use promises here? 我应该在这里使用诺言吗? Thanks for your help in advanced. 感谢您的高级帮助。

Parse.Cloud.job("PayTax", function(request, status) {

var promises = []; // promises array
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.each(function(user) {
      // Set and save the change
    var balance = user.get("balance");
    var stamount = user.get("streets");
    var level = user.get("level");
    var tax = 5 * level * stamount;
    var newbalance = balance - tax;

    user.set("balance", newbalance);
    user.save();
    console.log("User tax payed " + tax + " " + user.get("username") + "ID: " + user.id); 

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

        var userPointer = new Parse.Object("_User");
        userPointer.id = user.id;

        ledger.set("type", "tax");
        ledger.set("amount", tax);
        ledger.set("user", user);
        ledger.set("description", "Tax payed");
        ledger.set("xp", 0);
        console.log("Tax added to Ledger " + tax + user.get("username") + "ID: " + user.id); 
        promises.push(ledger.save());

});Parse.Promise.when(promises).then(function() {
        // Set the job's sucess status   
        status.success("Update balance completed successfully.");

}, function(error) {
    // Set the job's error status
        status.error("Uh oh, something went wrong." + error);
});

}); });

Yes. 是。 You should use Promises to ensure all the users in the loop are saved before returning. 您应使用Promises来确保循环中的所有用户都已保存,然后再返回。 Something like this: 像这样:

var promises = []; // promises array
promises.push(ledger.save()); // push every save in an array
// Then wait for all of them to finish in parallel
Parse.Promise.when(promises).then(function() { /* all saves done */ }); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM