【问题标题】:Parse.com Javascript Asyn Call within Loop循环内的 Parse.com Javascript 异步调用
【发布时间】:2015-06-23 14:43:10
【问题描述】:

我有一份公司清单,想计算开给每家公司的发票总金额。以下是我编写的代码。 (实际的逻辑在循环中比较复杂,这里把它们拿出来)

基本上,我想在循环中的业务逻辑完成后提醒消息(同样,它会在这里做一些更复杂的事情)。我有一种感觉,我可以通过使用 Promises 来解决这个问题,但不太确定如何使用它。我没有完全遵循 Parse.com 的文档。我已经坚持了几个小时。请帮忙!

function calculate(companies) {

    companies.forEach(function(company) {

        var total = 0;

        var invoice = Parse.Object.extend('Invoice');
        var query = new Parse.Query(invoice);
        query.equalTo('invoiceCompany', company);

        query.find().then(function(invoices) {

            invoices.forEach(function(invoice) {

                total += parseFloat(invoice.get('amount'));

            });

        });
    });

    alert("Calculated Finished");
}

【问题讨论】:

    标签: javascript asynchronous parse-platform foreach promise


    【解决方案1】:

    你可以并行使用promise:

    https://parse.com/docs/js/guide#promises-promises-in-parallel

    应该是这样的:

    function calculate(companies) {
      var promises = [];
      companies.forEach(function(company) {
    
          var total = 0;
    
          var invoice = Parse.Object.extend('Invoice');
          var query = new Parse.Query(invoice);
          query.equalTo('invoiceCompany', company);
    
          var queryPromise = query.find().then(function(invoices) {
    
              invoices.forEach(function(invoice) {
    
                  total += parseFloat(invoice.get('amount'));
    
              });
    
          });
    
          promises.push(queryPromise);
      });
    
      return Parse.Promise.when(promises);
    
    }
    
    calculate(companies).then(function() {
      alert("Calculated Finished");
    });
    

    【讨论】:

    • 谢谢!它工作得很好..只有一件事。当我得到 1000 家公司时,上面的代码非常慢。完成交易大约需要 10~15 秒。如何改进查询?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2019-03-24
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多