无法在我的云代码中执行 query.find()
can't execute query.find() in my cloud code
我有一个云代码,可以从 'Core' 和 HTTP API 获取数据并对其进行一些逻辑处理。现在我想根据结果发送推送通知,但代码甚至没有执行这里是一段代码
.then(function(result) {
for (var i = 0; i < queryObjects.length; i++) {
var object = queryObjects[i];
console.log('This will loop for '+queryObjects.length+' times');
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo('installationID',object.get('installationID'));
pushQuery.equalTo('deviceType','ios');
Parse.Push.send({
where: pushQuery,
data: {
alert: "When do we take to outer space",
badge: "Increment"
}
}, {
success: function() {
console.log("Push was successful");
},
error: function(error) {
console.error(error);
}
});
}
即使我尝试执行 query.find() 也没有任何反应
.then(function(result) {
for (var i = 0; i < queryObjects.length; i++) {
var object = queryObjects[i];
console.log('This will loop for '+queryObjects.length+' times');
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo('installationID',object.get('installationID'));
pushQuery.equalTo('deviceType','ios');
pushQuery.find({
success:function(list) {
console.log("Query Data: "+list);
},
error: function(error) {
console.log("Error: " + error.code + " " + error.message);
}
});
}
这是因为 Push.Send
函数的异步性质。您在一个循环中多次调用它,但是在从 .then
块 returning 之前,您不等待任何这些调用完成。要知道,当一个异步函数Pasrereturns时,并不一定就结束了。你需要等待它的 Promise 被履行以确保它已经完成。
您可以更改您的代码以确保只调用一次 Parse.Push 函数(在您的安装查询中,对您在循环中构建的 installationID 数组使用 containedIn
约束并调用Parse.Push 仅在循环后执行一次并确保 return 它的 Promise。
另一种解决方案是,每次在循环中调用 Parse.Push 函数时,都需要将它们推送到一个 promise 数组中,然后等待它们全部使用完 Parse.Promise.when(promises);
.文档非常清楚地说明了如何并行等待 Promises。
我有一个云代码,可以从 'Core' 和 HTTP API 获取数据并对其进行一些逻辑处理。现在我想根据结果发送推送通知,但代码甚至没有执行这里是一段代码
.then(function(result) {
for (var i = 0; i < queryObjects.length; i++) {
var object = queryObjects[i];
console.log('This will loop for '+queryObjects.length+' times');
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo('installationID',object.get('installationID'));
pushQuery.equalTo('deviceType','ios');
Parse.Push.send({
where: pushQuery,
data: {
alert: "When do we take to outer space",
badge: "Increment"
}
}, {
success: function() {
console.log("Push was successful");
},
error: function(error) {
console.error(error);
}
});
}
即使我尝试执行 query.find() 也没有任何反应
.then(function(result) {
for (var i = 0; i < queryObjects.length; i++) {
var object = queryObjects[i];
console.log('This will loop for '+queryObjects.length+' times');
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo('installationID',object.get('installationID'));
pushQuery.equalTo('deviceType','ios');
pushQuery.find({
success:function(list) {
console.log("Query Data: "+list);
},
error: function(error) {
console.log("Error: " + error.code + " " + error.message);
}
});
}
这是因为 Push.Send
函数的异步性质。您在一个循环中多次调用它,但是在从 .then
块 returning 之前,您不等待任何这些调用完成。要知道,当一个异步函数Pasrereturns时,并不一定就结束了。你需要等待它的 Promise 被履行以确保它已经完成。
您可以更改您的代码以确保只调用一次 Parse.Push 函数(在您的安装查询中,对您在循环中构建的 installationID 数组使用 containedIn
约束并调用Parse.Push 仅在循环后执行一次并确保 return 它的 Promise。
另一种解决方案是,每次在循环中调用 Parse.Push 函数时,都需要将它们推送到一个 promise 数组中,然后等待它们全部使用完 Parse.Promise.when(promises);
.文档非常清楚地说明了如何并行等待 Promises。