Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

exports.deletePictureFromUserProfile = function(deletingPictureId, customCallBack) {
var arrayForDelete = [];
picturesQuery = new Parse.Query("Picture");
picturesQuery.equalTo("objectId", deletingPictureId);
var query = new Parse.Query("LockSlot");
query.matchesQuery("picture", picturesQuery);
query.find().then(function(results){
if(results){
for(var i=0,l=results.length; i < l ; i++){
results[i].unset("picture");
results[i].save(null,{
success: function(myObject) {
return [];
},
error: function(myObject, error) {
console.error(error);
return [];
}
});
}
}else{
return [];
}
}).then(function(results){
var query = new Parse.Query("xxxxx");
query.matchesQuery("onePicture", picturesQuery);
query.find().then(function(results){
arrayForDelete.push.apply(arrayForDelete,results);
return arrayForDelete;
}).then(function(results){
var query = new Parse.Query("xxxx");
query.matchesQuery("onePicture", picturesQuery);
query.find().then(function(results){
arrayForDelete.push.apply(arrayForDelete,results);
return arrayForDelete;
}).then(function(results){
var query = new Parse.Query("xxxx");
query.matchesQuery("pictureFrom", picturesQuery);
query.find().then(function(results){
arrayForDelete.push.apply(arrayForDelete,results);
return arrayForDelete;
}).then(function(results){
var query = new Parse.Query("xxxxx");
query.matchesQuery("pictureTo", picturesQuery);
query.find().then(function(results){
arrayForDelete.push.apply(arrayForDelete,results);
return arrayForDelete;
}).then(function(results){
var query = new Parse.Query("xxxxx");
query.matchesQuery("picture", picturesQuery);
query.find().then(function(results){
arrayForDelete.push.apply(arrayForDelete,results);
return arrayForDelete;
}).then(function(results){
var query = new Parse.Query("xxxxx");
query.matchesQuery("picture", picturesQuery);
query.find().then(function(results){
customCallBack();
}).then(function(results){
var query = new Parse.Query("Picture");
query.equalTo("objectId", deletingPictureId);
query.first().then(function(image){
arrayForDelete.push(image);
if(arrayForDelete){
console.log("we got arrray for delete");
var num_of_deleted_objects = 0;
for(var i=0,l=arrayForDelete.length; i < l ; i++){
var object = arrayForDelete[i];
if(object){
object.destroy().then(function(results){
num_of_deleted_objects++;
if(num_of_deleted_objects==l){
customCallBack();
}
});
}
}
}
}, function(error) {
console.error(error);
customCallBack();
});
}, function(error) {
console.error(error);
customCallBack();
});
}, function(error) {
console.error(error);
customCallBack();
});
}, function(error) {
console.error(error);
customCallBack();
});
}, function(error) {
console.error(error);
customCallBack();
});
}, function(error) {
console.error(error);
customCallBack();
});
}, function(error) {
console.error(error);
customCallBack();
});
}, function(error) {
console.error(error);
customCallBack();
});
}function deletePictureObjFromUserProfile(picture, customCallBack){
var resultArrayForDelete = [];
resultArrayForDelete.push(picture);
async.parallel([
function(callback){
var query = new Parse.Query("xxxx");
query.equalTo("pict", picture);
query.find().then(function(results){
if(results.length>0){
var currentOperation =0;
var numOfOperation = results.length;
function enumCallBack(){
currentOperation++;
if(currentOperation==numOfOperation)
callback();
};
for(var i=0,l=results.length; i < l ; i++){
results[i].unset("pict");
results[i].save(null,{
success: function(myObject) {
enumCallBack();
},
error: function(myObject, error) {
console.error(error);
enumCallBack();
}
});
}
}else{
callback();
}
},
function(error){
console.error(error);
callback();
});
},
function(callback){
var query = new Parse.Query("xxxxx");
query.equalTo("onePict", picture);
query.find().then(function(results){
resultArrayForDelete.push.apply(resultArrayForDelete, results);
callback();
},
function(error){
console.error(error);
callback();
});
},function(callback){
var query = new Parse.Query("xxxxx");
query.equalTo("anotherPict", picture);
query.find().then(function(results){
resultArrayForDelete.push.apply(resultArrayForDelete, results);
callback();
},
function(error){
console.error(error);
callback();
});
},function(callback){
var query = new Parse.Query("xxxxxx");
query.equalTo("pictFrom", picture);
query.find().then(function(results){
resultArrayForDelete.push.apply(resultArrayForDelete, results);
callback();
},
function(error){
console.error(error);
callback();
});
},function(callback){
var query = new Parse.Query("xxxxxxx");
query.equalTo("pictTo", picture);
query.find().then(function(results){
resultArrayForDelete.push.apply(resultArrayForDelete,results);
callback();
},
function(error){
console.error(error);
callback();
});
},function(callback){
var query = new Parse.Query("xxxxxxxxxxx");
query.equalTo("pict", picture);
query.find().then(function(results){
resultArrayForDelete.push.apply(resultArrayForDelete, results);
callback();
},
function(error){
console.error(error);
callback();
});
},function(callback){
var query = new Parse.Query("xxxxxxx");
query.equalTo("pict", picture);
query.find().then(function(results){
resultArrayForDelete.push.apply(resultArrayForDelete,results);
},
function(error){
console.error(error);
callback();
});
}
],
function(error, results){
if(error)
console.error(error);
if(resultArrayForDelete.length>0){
Parse.Object.destroyAll(resultArrayForDelete, function(success, error) {
if(error)
console.error(error);
customCallBack();
},
function(error){
customCallBack();
});
}else{
customCallBack();
}
});
} asyncTest("Register and activate account", function() {
var password = "SECRET",
user, newUser,
deed, registrationId;
Parse.Cloud.run("register", {
params: {
firstName: "REMOVEME",
lastName: "REMOVEME"
},
password: password
}).then(function(id) {
registrationId = id;
return Parse.User.signUp("testUser", "testPassword").then(function() {
return Parse.Promise.as();
}, function(error) {
return Parse.User.logIn("testUser", "testPassword");
});
}).then(function() {
return Parse.Cloud.run("activate", {
id: registrationId,
password: password
}).then(function() {
ok(false, "User can activate if Deed is not created!");
return Parse.Promise.error();
}, function(error) {
// Если вернуть удачно завершенный Promise даже из error callback, дальше
// по цепочке будет вызван success callback
// Тот же фокус наоборот сработает для success callback выше
ok(true, "Can't activate if deed is not created yet");
return Parse.Promise.as();
});
}).then(function() {
// Тут интересный момент: и success и error callback возвращают пустой успешно
// завершенный Promise. А это значит мы всегда попадем в Teardown
ok(true, "All ok!");
return Parse.Promise.as();
}, function(error) {
ok(false, error && error.message ? error.message : JSON.stringify(error));
return Parse.Promise.as();
}).then(function() {
// Teardown
return Parse.Object.destroyAll(_.compact([user, newUser, deed]));
}).then(function() {
start();
}, function() {
start();
});
});
beens.Points = Parse.Object.extend("Points", {}, {
get: function (user, date) {
var query = new Parse.Query("Points");
query.equalTo("user", user);
query.equalTo("date", date);
return query.first().then(function (record) {
if (typeof record === "undefined") {
record = new beens.Points();
record.set("user", user);
record.set("userId", user.id);
record.set("date", date);
}
return Parse.Promise.as(record);
});
}
});
.then(function (result) {
response.success(result);
}, function (error) {
console.log("ERROR: " + JSON.stringify(error));
response.error(error);
});
parse develop <имя приложения>
return Parse.Promise.when([userQuery.find(),
commentQuery.find(),
Parse.Cloud.run("someFunction")])
.then(function(users, comments, someResult) {
return Parse.Promise.as("Bingo!");
}, function(userError, commentsError, callError){
return Parse.Promise.error("Error!");
});
__weak typeof(self) weakSelf = self; рекомендую libextobjc с его @weakify/@strongify
Социальная сеть без сервера. История разработки iOS-клиента и backend