在以下代码中,控制器在记录“对象被销毁”的服务中运行一个函数。该函数返回一个承诺。
在该承诺的.then()上,在控制器中记录“已删除”
首先应该记录“对象被破坏”,然后(在.then()中)它应该记录“已删除”。不幸的是,似乎首先记录了“已删除”。似乎在函数完成之前运行了promise的.then()。
app.js
this.deleteData = function (db, objectId) {
var database = Parse.Object.extend(db);
var query = new Parse.Query(database);
return query.get(objectId, {
success: function (result) {
result.destroy({
success: function (result) {
console.log("object was destroyed");
},
error: function (result, err) {
console.log("object was not destroyed");
console.log(err);
}
});
},
error: function (result, err) {
console.log(err);
}
});
}
控制器
function ResourcesCtrl ($scope, globalFunctions, CRUD) {
$scope.deleteResource = function (objectId) {
CRUD.deleteData('resources', objectId).then(function (result2) {
console.log("deleted");
refreshResources();
});
}
答案 0 :(得分:0)
成功回调中对result.destroy()的调用是异步的,因此你的成功函数将继续并返回,然后保证你从deleteData函数返回将被解析。在回调result.destroy()之前所有这一切。
最终,您希望deleteData从result.destroy()返回promise。
这是一个粗略的例子
this.deleteData = function (db, objectId) {
var database = Parse.Object.extend(db);
var query = new Parse.Query(database);
return query.get(objectId).then(function (result) {
return result.destroy().then(function (result) {
console.log("object was destroyed");
}, function (err) {
console.log("object was not destroyed");
console.log(err);
});
}, function (err) {
console.log(err);
});
};
然后如果你不需要登录就可以更简洁
this.deleteData = function (db, objectId) {
var database = Parse.Object.extend(db);
var query = new Parse.Query(database);
return query.get(objectId).then(function (result) {
return result.destroy();
});
};