2016-04-25 182 views
0

我正在解决一个困惑了我几天的解析云代码问题。解析Query.First成功/错误回调间歇性地不叫

我有一个功能,将检查用户是否已注册推送通知,并没有禁用它们之后。它将一个响应对象作为输入,一个字段名称来检查一个PFUser指针和一个回调。

function shouldSendPushNotification(object, field, callback){ 
user = object.get(field); 
if(!user){ 
    console.log("Error: No User in object"); 
    return; 
} 
console.log('User is:'); 
console.log(user); 

userId = user.id; 
console.log('Seeking push status for user: ' +userId); 
console.log(object); 

userQuery = new Parse.Query(Parse.User); 
userQuery.equalTo("objectId", userId); 

console.log('User Query:'); 
console.log(userQuery); 
userQuery.first 
({ 
    success: function(userRetrieved) 
    { 
     console.log('Successfully found user:'); 
     console.log(userRetrieved); 

     if(userRetrieved.get("pushEnabled") == false){ 
      console.log('Error: Push not enabled for user. Aborting.'); 
      callback(false); 
      return; 
     } 

     console.log("Push enabled for user. Continuing.") 
     callback(true); 
     return; 
    }, 
    error: function(error) 
    { 
     console.log('Error: Failed to find user for push check.'); 
     callback(false); 
     return; 
    } 
}); 
} 

我从两个地方调用这个方法。在具有PFUser(用户字段)的指针引用的“Messages”类的afterSave函数中,还有一个自定义云函数,该函数通过“Reminder”类循环,该类也具有一个名为“Owner”的指针给PFUser。

的afterSave方法的日志输出低于(反向时间顺序排列):

I2016-04-25T08:09:07.716Z] - New object created with objectId: 3olbwjbMVW 
I2016-04-25T08:09:07.679Z] - Successfully sent new message push notification to channel: user_7le4EGeKnC with message: New message recieved from Richi Rich 
I2016-04-25T08:09:07.578Z] - Fetching Clinic Details for id: 7KgcJMLheu 
I2016-04-25T08:09:07.577Z] - Attempting Push to channel: user_7le4EGeKnC 
I2016-04-25T08:09:07.576Z] - Push enabled for user. Continuing. 
I2016-04-25T08:09:07.575Z] - {"address1":"123 Sesame Street","address2":"","addressPostcode":1234,"addressState":"VIC","addressSuburb":"Port Melbourne","clinic":{"__type":"Pointer","className":"Clinic","objectId":"7KgcJMLheu"},"createdAt":"2016-03-20T09:35:52.252Z","email":"[email protected]","emailVerified":false,"firstName":"Steve","lastName":"Forbes","phone":"0400000000","pushEnabled":true,"updatedAt":"2016-04-18T00:47:54.340Z","username":"[email protected]","objectId":"7le4EGeKnC"} 
I2016-04-25T08:09:07.574Z] - Successfully found user: 

I2016-04-25T08:09:07.526Z] - {"where":{"objectId":"7le4EGeKnC"}} 
I2016-04-25T08:09:07.525Z] - User Query: 

I2016-04-25T08:09:07.524Z] - {"clinic":{"__type":"Pointer","className":"Clinic","objectId":"7KgcJMLheu"},"content":"<html><body><p style=\"font-family: serif; font-size: 26px;\">This is a test message from Parse</p></body></html>","createdAt":"2016-04-25T08:09:07.518Z","isUnread":true,"title":"Yo - Test","updatedAt":"2016-04-25T08:09:07.518Z","user":{"__type":"Pointer","className":"_User","objectId":"7le4EGeKnC"},"objectId":"3olbwjbMVW"} 

I2016-04-25T08:09:07.523Z] - Seeking push status for user: 7le4EGeKnC 
I2016-04-25T08:09:07.522Z] - {"objectId":"7le4EGeKnC"} 
I2016-04-25T08:09:07.521Z] - User is: 

为云功能:

I2016-04-25T08:09:53.838Z] - {"where":{"objectId":"7le4EGeKnC"}} 
I2016-04-25T08:09:53.837Z] - User Query: 

I2016-04-25T08:09:53.836Z] - {"Owner":{"__type":"Pointer","className":"_User","objectId":"7le4EGeKnC"},"createdAt":"2016-04-10T05:45:26.552Z","frequencyInterval":0,"name":"Test","nextReminderDate":{"__type":"Date","iso":"2016-04-26T06:45:00.000Z"},"pet":"Pizza","startDate":{"__type":"Date","iso":"2016-04-12T06:45:14.000Z"},"type":0,"updatedAt":"2016-04-25T07:06:46.986Z","objectId":"BGvPwnq5SB"} 

I2016-04-25T08:09:53.835Z] - Seeking push status for user: 7le4EGeKnC 
I2016-04-25T08:09:53.834Z] - {"objectId":"7le4EGeKnC"} 
I2016-04-25T08:09:53.833Z] - User is: 

正如你可以看到所述第一呼叫完全执行 - 然而第二个具有相同的输入,但userQuery.First()的成功/错误回调从未得到执行。我不知道为什么!

回答

0

如果您将包含所有引用的函数将会很有帮助。就目前而言,确定“大局”有点难。

我的猜测是你的云代码函数没有正确地链接承诺。我会建议调整你的函数来返回一个承诺,而不是利用回调函数。

可能发生的情况是Cloud Code函数正在立即返回,而不是等待此函数完成,因为它是异步的。正确使用Parse.Promise将解决此问题。