2016-01-14 42 views
2

背景:代碼141(錯誤:不叫成功/錯誤)的解析雲代碼嵌套查詢

我有圖像的解析數據庫。簡單地說,我的代碼做到這一點:

的用戶,通過解析雲呼叫請求的圖像(「getNewPicture」)。嵌套在我之內,檢查他是否看到過任何圖片(與其他要求一起),如果是,則傳遞一張特定圖片(getSpecifiedPicture)。如果他沒有,那麼我會提供一張新照片(getNewPicture)。

問題:

通過解析雲代碼函數調用「getNewPicture」我得到一個錯誤代碼141是什麼奇怪的是,它的工作原理爲Android而不是iOS版。

我的代碼:

Parse.Cloud.define("getNewPicture", function(request, response) { 
    var SeenPictures = Parse.Object.extend("SeenPictures"); 
    var query = new Parse.Query(SeenPictures); 
    var username = request.params.username; 
    var notWantedPics = []; 
    query.ascending("createdAt"); 
    query.equalTo("username", username); 
    query.find({ 
    success: function(results) { 
     for (var i = 0; i < results.length; i++) { 
     if (results[i].get("likes") == 1 || results[i].get("dislikes") == 1) { 
      notWantedPics.push(results[i].get("pictureId")); 
      results.splice(i, 1); 
      i--; 
     } 
     } 
     if (results != 0) { 
     getSpecifiedPicture(results[0].get("pictureId"), { 
      success: function(returnValue) { 
      response.success(returnValue); 
      }, 
      error: function(error) { 
      response.error(error); 
      } 
     }); 
     } else { 
     getNewPicture(username, notWantedPics, { 
      success: function(returnValue) { 
      response.success(returnValue); 
      }, 
      error: function(error) { 
      response.error(error); 
      } 
     }); 
     } 
    }, 
    error: function() { 
     response.error(error); 
    } 
    }); 
}); 

function getSpecifiedPicture(specifiedPic, callback) { 
    var Pictures = Parse.Object.extend("Pictures"); 
    var pictures = new Parse.Query(Pictures); 
    pictures.get(specifiedPic, { 
    success: function(picture) { 
     callback.success(picture); 
    }, 
    error: function(error) { 
     callback.error(error); 
    } 
    }); 
} 

function getNewPicture(username, notWantedPics, callback) { 
    var Pictures = Parse.Object.extend("Pictures"); 
    var pictures = new Parse.Query(Pictures); 
    pictures.notEqualTo("photographerUserName", username); 
    pictures.notContainedIn("objectId", notWantedPics); 
    pictures.ascending("createdAt"); 
    pictures.find({ 
    success: function(results) { 
     if (results.length > 0) { 
     var object = results[0]; 
     //Some other fancy stuff 
     object.save(); 
     callback.success(object); 
     } 
    }, 
    error: function(error) { 
     callback.error(error); 
    } 
    }); 
} 

爲什麼會出現代碼141?任何幫助表示讚賞。

謝謝。

回答

2

你的回調是一個爛攤子。我重寫它遵循更多的承諾鏈風格。更容易遵循。另外,underscore.js是你的朋友。希望我的想法正確。

var _ = require('underscore'); // Javascript Library 

Parse.Cloud.define("getNewPicture", function(request, response) { 

    var username = request.params.username; 
    var notWantedPics = []; 

    if (!username) { 
     return response.error('No username.'); 
    } 

    var query1 = new Parse.Query("SeenPictures"); 
    query1.ascending("createdAt"); 
    query1.equalTo("username", username); 
    var SeenPictures = query1.find(); 

    return Parse.Promise.when([SeenPictures]).then(function (SeenPictures) { 

     SeenPictures = _.filter(SeenPictures, function (SeenPicture) { 
      if (SeenPicture.get("likes") == 1 || SeenPicture.get("dislikes") == 1) { 
       notWantedPics.push(SeenPicture.get("pictureId")); 
       return false; 
      } 
      else { 
       return true; 
      } 
     }); 

     // notWantedPics? 

     if (SeenPictures > 0) { 
      var query2 = new Parse.Query("Pictures"); 
      var Pictures = [query2.get(SeenPictures[0].get('pictureId'))]; 
     } 
     else { 
      var query2 = new Parse.Query("Pictures"); 
      query2.notEqualTo("photographerUserName", username); 
      query2.notContainedIn("objectId", notWantedPics); 
      query2.ascending("createdAt"); 
      var Pictures = query2.find(); 
     } 

     return Parse.Promise.when([Pictures]); 

    }).then(function (Pictures) { 

     if (Pictures > 0) { 

      // Success 
      return response.success(Pictures[0]); 

     } else { 
      return Parse.Promise.error("No pictures."); 
     } 

    }, function (error) { 
     // Error 
     return response.error(error); 
    }); 

}); 
+1

太感謝你了,完美的作品:)! – StackPWRequirmentsAreCrazy

+0

沒問題!順便說一句,嗨,渥太華! – BuffMcBigHuge