Javascript 如何仅在angularjs中完成网络调用时才允许排序

Javascript 如何仅在angularjs中完成网络调用时才允许排序,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我有一个函数,我正在调用该函数来拼接一些项目列表,并将进行网络调用以将新排序的列表发送到DB 我的问题是,我只想允许用户在网络通话结束后重新订购。我正试图用一种承诺的方法来实现这一点,但它似乎对我不起作用 我正在将一个变量completed设置为false,并在网络调用完成后将其更改为true…我的方法可能是错误的,因此如果有人以前做过类似的事情,请提供一些建议 这是我到目前为止所拥有的 $scope.moveDown = function(array, element) { v

我有一个函数,我正在调用该函数来拼接一些项目列表,并将进行网络调用以将新排序的列表发送到DB

我的问题是,我只想允许用户在网络通话结束后重新订购。我正试图用一种承诺的方法来实现这一点,但它似乎对我不起作用

我正在将一个变量completed设置为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;
        }
      };

在这方面,你必须使用承诺

第一,;在控制器中添加承诺依赖项:
$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()放在网络调用中?是的;当您的网络通话承诺完成时。用这个例子更新了我的回答。