我正在用 Parse 开发一个应用程序,我正在尝试理解 Promise。除了这里非常简单的示例之外,我没有找到很多工作示例:https://parse.com/docs/js/guide 。
我正在查询 _User 表。然后我在 _.each 循环中循环访问用户。我在每次迭代的循环内运行 2 个云函数。我在什么时候创建 promise ?我是否为循环内的每个云函数成功创建一个?或者我是否将每个成功返回值插入数组并使其成为循环之外的 promise 值?我已经尝试了这两种方法,但似乎无法找出正确的语法。
我将用伪代码对其进行分解,因为这可能比实际代码更容易:
var query = new Parse.Query(Parse.User); query.find().then(函数(用户){
- 在 _.each 循环中循环遍历每个用户,并为每个返回数字的用户运行一个云函数。
- 如果数字 > 0,那么我将他们的用户名推送到 array1。
- 然后,我对用户运行第二个云函数(仍在 _.each 循环内),返回一个数字。
- 如果数字 > 0,那么我将他们的用户名推送到 array2。
}).then(函数(promisesArray){
//我希望“promisesArray”是上一节中创建的 2 个数组,或者是它们的串联。
//最终,我需要这里的用户名列表。具体来说,上一节中从云函数获得正数值的用户
- 连接 2 个数组(如果尚未连接)
- 删除重复项
- 向数组中的用户发送推送通知 });
问题: - 我在什么时候创建并返回 promise 以及我应该使用什么语法? - .then(function(promisesArray){ 应该是 .when(function(promisesArray){ (when 而不是 then)吗?
最佳答案
谢谢两位的想法!这就是最终起作用的:
var query = new Parse.Query(Parse.User);
query.find().then(function(users){
var allPromises = [];
var promise1, promise2;
_.each(users, function(user){
if(user.get("myvalue") != "undefined" && user.get("myvalue") != ""){
promise1 = Parse.Cloud.run("getBatch1", {param1: param1value, param2: param2value})
.then(function(numResult){
if(Number(numResult) > 0){
return Parse.Promise.as(user.getUsername());
}
});
}
allPromises.push(promise1);
if(user.get("anothervalue")==true){
promise2 = Parse.Cloud.run("getBatch2", {param1: param1value, param2: param2value})
.then(function(numResult2){
if(Number(numResult2) > 0){
return Parse.Promise.as(user.getUsername());
}
});
}
allPromises.push(promise2);
});
// Return when all promises have succeeded.
return Parse.Promise.when(allPromises);
}).then(function(){
var allPushes = [];
_.each(arguments, function(pushUser){
// Only add the user to the push array if it's a valid user & not already there.
if(pushUser != null && allPushes.indexOf(pushUser) === -1){
allPushes.push(pushUser);
}
});
// Send pushes to users who got new leads.
if(allPushes.length > 0){
Parse.Push.send({
channels: allPushes,
data: {
alert: "You have new leads."
}
}, {
success: function () {
response.success("Leads updated and push notifications sent.");
},
error: function (error) {
console.log(error);
console.error(error);
response.error(error.message);
}
});
}
response.success(JSON.stringify(allPushes));
}, // If the query was not successful, log the error
function(error){
console.log(error);
console.error(error);
response.error(error.message);
});
关于javascript - 理解 Parse 中的 JavaScript Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33306546/