我有一个函数,我打电话来拼接一些项目列表,并进行网络调用以将新排序的列表发送到数据库。
我的问题是我想只允许用户在网络通话结束后重新订购。我试图用一种承诺方法做到这一点,但似乎对我不起作用。
我将一个变量设置为false并在网络调用完成后将其更改为true ...我的方法可能是错误的,所以如果某人之前做过类似的事情,我们会感激一些建议。
这是我到目前为止所拥有的......
$scope.moveDown = function(array, element) {
var index = array.indexOf(element);
var completed = false;
if(index === -1){
return false;
}
if(array[index + 1] && completed === true){
// rearranging elements
array.splice(index, 2, array[index + 1], array[index]);
// network call
teacherList.saveOrder(id, teachers).then(function(resolve) {
resolve(completed === true);
});
}else {
// Do nothing
return 0;
}
};
答案 0 :(得分:0)
角度你必须使用承诺。
首先;在控制器中添加promise依赖项:$q
然后;更新您的网络电话是一个承诺:
var myService = function() {
var d = $q.defer();
var configQuery = {
'url': myUri,
'method': "GET"
};
$http(configQuery).then(function(res) {
d.resolve(res);
}, function(err) {
d.reject(err);
})
return d.promise;
}
请注意,$ http已经是一个承诺;我把它分开来更清楚我的解释。
最后;在承诺完成后调用您的代码:
//call your http promise
myService().then(function(){
//success add your function call
$scope. moveDown()
}, function(err){
//error callback
});
修改--- 强>
如果您愿意,可以将您的电话添加到$ http成功回复中:
var myFunction = function(){
$http(configQuery).then(function(res) {
$scope. moveDown()
}, function(err) {
});
}