javascript - 理解 Parse 中的 JavaScript Promise

标签 javascript parse-platform

我正在用 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/

相关文章:

ios - PFLogInViewController 错误 - 使用 Parse 注销后无法登录 Facebook

javascript - 如何使用 ECMAScript 6 模块导入 PlotlyJS

Javascript 使用现有对象属性创建对象属性

javascript - 转义 HTML 字符

php - AJAX 上传不起作用,它会重新加载整个页面

javascript - 如何使用以下 html 为我的 Android 应用程序动态创建词云?

ios - 托管解析是否支持推送通知?

swift - 快速处理 PFErrorCode

ios - 我如何匿名将用户名信息推送到 Parse

parse-platform - 解析云码登录注册示例