gpt4 book ai didi

javascript - 将列表传递给 Parse.Promise.when 但仅获取 promise 链中的第一个元素

转载 作者:行者123 更新时间:2023-11-30 00:24:31 24 4
gpt4 key购买 nike

大家好,我在 Parse Cloud Code 中使用 Parse.Promise.when 时遇到问题。

在我的 Parse Cloud 代码中,我想更新我的数据库中已存在的航类记录列表的到达时间。

我正在做的是传递一个 flight_list 这是最新的航类记录并迭代每条记录,使用 Parse.Query.first 找到响应记录并推送 promise 一个列表并将该列表返回到下一个 promise 链 then 函数。

我希望我能得到一个结果列表,但我只得到第一个查询结果而且不知道为什么。以下是我的代码:

// Here we start a function

Parse.Cloud.httpRequest(
// Some HTTP request
).then(function(httpResponse) {

// Some pre-processing...
// flight_list is obtained here. It is a list of javascript object

// Here start the related code
var FlightInfo = Parse.Object.extend('FlightInfo'); // Flight object
var promises = []; // Promise list for next promise chain input

// Iterate each element in flight_list
_.each(flight_list, function(flight) {
var query = new Parse.Query(FlightInfo);

query.equalTo('flight_date' , flight_date);
query.equalTo('air_carrier' , flight.air_carrier);
query.equalTo('flight_no' , flight.flight_no);
query.equalTo('terminal' , flight.terminal);
query.equalTo('origin' , flight.origin);

// Push query.first promises to a list
promises.push(query.first());
});

// Return promise list and flight_list for next "then" function use
return Parse.Promise.when(promises, flight_list);

}).then(function(query_result) {
// 1. query_result should be the promises list in the previous then function
// 2. flight_list will be accessed using argument keyword

// !! Only got first element from promises list in previous function
console.log('query_result:');
console.log(query_result);

// No problem for flight_list.
for (var i = 0; i < arguments.length; i += 1) {
console.log(i + ':' + JSON.stringify(arguments[i]));
}

});

正如上面的代码,我希望 query_result 是一个 javascript 对象(航类信息)的列表,例如:[{object1}, {object2}, {object3}, ...] 但是 query_result 是一个对象:{object1}。它甚至不是像 [{object1}] 这样的列表中的一个对象。

我是否遗漏了代码中的任何内容?我应该如何修改我的代码以获得正确的返回值?

最佳答案

您对 API 参数感到困惑。 Parse.Promise.when 有 2 个签名 -

  1. 何时( promise 1, promise 2)
  2. when(promises) <- 不能将 flight_list 作为第二个参数发送,因为它不是一个 promise。

由于您发送的不是 promise 的第二个参数,因此您在不知不觉中使用了第一个参数。因此,响应只有一个元素对应于第一个 promise 。

解决办法是

// Where mFlightList is a global variable
mFlightList = flight_list;
return Parse.Promise.when(promises);

}).then(function() {
// arguments contains the actual result of the promises passed in 'when'
for (var i = 0; i < arguments.length; i += 1) {
console.log(i + ':' + JSON.stringify(arguments[i]));
}

});

关于javascript - 将列表传递给 Parse.Promise.when 但仅获取 promise 链中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946486/

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