Javascript 如何仅在angularjs中完成网络调用时才允许排序
我有一个函数,我正在调用该函数来拼接一些项目列表,并将进行网络调用以将新排序的列表发送到DB 我的问题是,我只想允许用户在网络通话结束后重新订购。我正试图用一种承诺的方法来实现这一点,但它似乎对我不起作用 我正在将一个变量completed设置为false,并在网络调用完成后将其更改为true…我的方法可能是错误的,因此如果有人以前做过类似的事情,请提供一些建议 这是我到目前为止所拥有的Javascript 如何仅在angularjs中完成网络调用时才允许排序,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我有一个函数,我正在调用该函数来拼接一些项目列表,并将进行网络调用以将新排序的列表发送到DB 我的问题是,我只想允许用户在网络通话结束后重新订购。我正试图用一种承诺的方法来实现这一点,但它似乎对我不起作用 我正在将一个变量completed设置为false,并在网络调用完成后将其更改为true…我的方法可能是错误的,因此如果有人以前做过类似的事情,请提供一些建议 这是我到目前为止所拥有的 $scope.moveDown = function(array, element) { v
$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;
}
};
在这方面,你必须使用承诺 第一,;在控制器中添加承诺依赖项:
$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 sucess响应中:
var myFunction = function(){
$http(configQuery).then(function(res) {
$scope. moveDown()
}, function(err) {
});
}
嗯,那么在我的例子中……我应该把重新排序函数$scope.movdDown()放在网络调用中?是的;当您的网络通话承诺完成时。用这个例子更新了我的回答。