解析没有发送推送承诺

时间:2016-10-18 16:15:39

标签: node.js parse-platform promise angular-promise

我尝试使用promises发送推送通知。因为我在获得args之后首先从服务器获取数据。这是我的代码。

var fromUser = request.object.get('fromUser').fetch().then(function(user) {
  var userName = user.get('username');
  userCredits.userName = user.get('username');
  //userPromise.resolve(userName);
  userPromise.resolve(userName);
});
promises = [userPromise, groupPromise];
Parse.Promise.when(promises).then(function(result1)  {
  var query = new Parse.Query(Parse.Installation);
  query.containedIn('channels', members);
  console.log("push sending #######");
  Parse.Push.send({
    where: query,
    data: {
      aps: {
        alert: {
          "loc-key": type,
          "loc-args": [userCredits.userName, userCredits.groupName]
        },
        isJSONPush: 'true',
        badge: 'increment',
        'sound': 'default',
        type: type,
        group: group,
        message: message,
        messages: messages,
        activity: request.object,
        "mutable-content": 1
      },
    }
  }, {
    useMasterKey: true
  }, {
    success: function() {
      console.log('##### PUSH OK');
    },
    error: function(error) {
      console.log('##### PUSH ERROR' + error.message);
    }
  });
  //return response.success(result1);
}, function(error) {
  console.log("error + " + error);
  return response.error(error);
});

因此,如果我在承诺范围之外使用它,它就可以了。但是,当我试图在承诺范围内使用它时,它无法正常工作。

这也是输出我得到的错误。

parse-server-push-adapter APNS找不到

的虚拟连接

1 个答案:

答案 0 :(得分:0)

可以使用更多代码来查看此处发生的情况。即可以使用userPromisegroupPromise

的声明

但我非常有信心你的承诺不会像你想象的那样发挥作用。

这是我对你给我们做出一两个假设的重写,我认为整个代码看起来像是什么。请注意我如何获取request.object.get('fromUser').fetch()的结果并将其放入Parse.Promise.when

var userPromise = request.object.get('fromUser').fetch();
var groupPromise = groupQueryThatReturnsAPromise;


// Note that if you put the promises not in an array
// but sep with commas, you know what's returned.... 
Parse.Promise.when(userPromise, groupPromise).then(function (user, group) {
  // just to make sure we got here with what we want :)
  console.log(user, group);
  var query = new Parse.Query(Parse.Installation);
  query.containedIn('channels', members);
  console.log('push sending #######');
  return Parse.Push.send({
    where: query,
    data: {
      aps: {
        alert: {
          'loc-key': type,
          'loc-args': [user.get('username'), group.get('groupName')]
        },
        isJSONPush: 'true',
        badge: 'increment',
        sound: 'default',
        type,  // just some fancy object notation if the key and value are the same :).
        group,
        message,
        messages,
        activity: request.object,
        'mutable-content': 1,
      },
    },
  }, {
    useMasterKey: true,
  });
}).then(() => response.success) // fancy new style "fat arrow" function declaration
.then(null, e => response.error(e)); // chain an extra then in case we error out in the when...

PS:抱歉,在将它放到这里之前我无法运行代码来验证它,希望这有帮助,但是问题是违背承诺所以如果你专注于确保承诺链的每个部分都按照你的方式工作认为这是与调试声明,你会得到它直接,这将有助于你肯定前进!祝你好运。