2016-04-25 31 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將解決此問題。