gpt4 book ai didi

javascript - then/promises 不能在 for 循环后使用变量

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

我有这段代码,但我无法在 for 循环之外使用此 userArray,不知道为什么它什么都不返回,这是代码:

Parse.Cloud.define("test", function(request, response) {

var UserFavourite = Parse.Object.extend("UserFavourite");
var queryFavourite = new Parse.Query(UserFavourite);

var userArray = [];
var TestItem = Parse.Object.extend("TestItem");
var query = new Parse.Query(TestItem);
query.limit(1000);
query.equalTo('school', 'Union College (NY)');
query.find().then(function(results) {
return results;


}).then(function(results) {
for (var i = 0; i < results.length; i++) {
var object = results[i];
var item = object.get('item');
var school = object.get('school');
var meal = object.get('meal');

var UserFavourite = Parse.Object.extend("UserFavourite");
var queryFavourite = new Parse.Query(UserFavourite);
queryFavourite.equalTo("item", item);
queryFavourite.equalTo("school", school);
queryFavourite.find().then(function(users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
var userID = user.get('user').id;
if (userArray.indexOf(userID) === -1) {
userArray.push(userID);
}
// console.log(userArray);
return userArray;
}
return userArray;


});
console.log('sadf '+userArray);
}
console.log('sadf '+userArray);
return userArray;


}).then(function() {
console.log(userArray);
});

我已经看了一下这个,但我似乎仍然能够在最后一个函数或它之前的两个 console.log 中获取 userArray

How do I return the response from an asynchronous call?

提前感谢您的帮助。

最佳答案

注意:这不是经过测试的代码......但解决方案是使用一个 promise ,一旦循环中的所有 promise 完成,该 promise 就会被解决

var UserFavourite = Parse.Object.extend("UserFavourite");
var queryFavourite = new Parse.Query(UserFavourite);

var userArray = [];
var TestItem = Parse.Object.extend("TestItem");
var query = new Parse.Query(TestItem);
query.limit(1000);
query.equalTo('school', 'Union College (NY)');
query.find().then(function (results) {
return results;
}).then(function (results) {
var promises = [];
for (var i = 0; i < results.length; i++) {
var object = results[i];
var item = object.get('item');
var school = object.get('school');
var meal = object.get('meal');

var UserFavourite = Parse.Object.extend("UserFavourite");
var queryFavourite = new Parse.Query(UserFavourite);
queryFavourite.equalTo("item", item);
queryFavourite.equalTo("school", school);
var prom = queryFavourite.find().then(function (users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
var userID = user.get('user').id;
if (userArray.indexOf(userID) === -1) {
userArray.push(userID);
}
// console.log(userArray);
return userArray;
}
return userArray;
});
promises.push(prom);
console.log('sadf ' + userArray);
}
console.log('sadf ' + userArray);
return Parse.Promise.when.apply(Parse.Promise, promises);
}).then(function () {
console.log(userArray);
});

这里我们所做的是在循环中创建一个 promise 数组,这些 promise 将传递给 .when()。返回一个 promise ,当所有传递给它的 promise 都将完成时,该 promise 将得到解决。

所以根据定义,最后一个 then() 应该得到更新的 userArray - 测试并让我知道它是否有效

关于javascript - then/promises 不能在 for 循环后使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25598811/

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