gpt4 book ai didi

javascript - 如何正确使用Parse/Promise?

转载 作者:行者123 更新时间:2023-12-03 10:01:09 26 4
gpt4 key购买 nike

我正在使用 Parse.com 编写一些 JavaScript 代码。

说实话,我一直在阅读如何使用 Promise 并做了很多研究,但仍然不知道如何正确使用它..

这是一个场景:

  1. 我有两个表(对象),分别名为 ClientInvoiceHeader
  2. 客户端可以有多个 InvoiceHeader
  3. InvoiceHeader 有一个名为“金额”的列,我想要每个客户的 InvoiceHeader 的总金额。

例如,如果客户端 A 有两个 InvoiceHeader,金额分别为 30 和 20,而客户端 B 没有任何内容,那么我希望在 tempArray 中看到的结果是“50, 0”。

但是,使用下面的代码,看起来它是随机的。我的意思是有时 tempArray 得到“50, 50”或“50, 0”。我怀疑这是由于 Promise 的错误使用造成的。

请帮助我。我一直在研究代码并卡住了几天。

$(document).ready(function() {
var client = Parse.Object.extend("Client");
var query = new Parse.Query(client);
var tempArray = [];

query.find().then(function(objects) {
return objects;
}).then(function (objects) {
var promises = [];
var totalForHeader = 0;

objects.forEach(function(object) {
totalForHeader = 0;

var invoiceHeader = Parse.Object.extend('InvoiceHeader');
var queryForInvoiceHeader = new Parse.Query(invoiceHeader);
queryForInvoiceHeader.equalTo('headerClient', object);

var prom = queryForInvoiceHeader.find().then(function(headers) {

headers.forEach(function(header) {
totalForHeader += totalForHeader +
parseFloat(header.get('headerOutstandingAmount'));
});

tempArray.push(totalForHeader);
});
promises.push(prom);
});
return Parse.Promise.when.apply(Parse.Promise, promises);

}).then(function () {
// after all of above jobs are done, do something here...
});
} );

最佳答案

假设 Parse.com 的 Promise 类遵循 A+ 规范,并且我了解您希望哪些位最终位于何处,这应该可以工作:

$(document).ready(function() {

var clientClass = Parse.Object.extend("Client");
var clientQuery = new Parse.Query(clientClass);

clientQuery.find().then(function(clients) {

var totalPromises = [];

clients.forEach(function(client) {

var invoiceHeaderClass = Parse.Object.extend('InvoiceHeader');
var invoiceHeaderQuery = new Parse.Query(invoiceHeaderClass);
invoiceHeaderQuery.equalTo('headerClient', client);

var totalPromise = invoiceHeaderQuery.find().then(function(invoiceHeaders) {
var totalForHeader = 0;
invoiceHeaders.forEach(function(invoiceHeader) {
totalForHeader += parseFloat(invoiceHeader.get('headerOutstandingAmount'));
});
return totalForHeader;
});

totalPromises.push(totalPromise);

});

return Parse.Promise.when(totalPromises);

}).then(function(totals) {

// here you can use the `totals` array.

});
});

关于javascript - 如何正确使用Parse/Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30593459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com