在继续之前如何等待http请求完成?

时间:2016-07-21 14:13:31

标签: javascript http

我目前正在通过http请求访问数据库,但是在下面的函数中,我遇到了问题,因为请求在需要数据后完成。

$scope.submitUserName = function() {
    console.log("button got clicked")
    $http({
        method: 'GET',
        url: '/data/Graeham'
    }).then(function successCallback(response) {
        $scope.dataStuff = response;
        console.log($scope.dataStuff);
    }, function errorCallback(response) {
        // called asynchronously if an error occurs
        // or server returns response with an error status.
    });
    console.log($scope.formData.userName);
    console.log($scope.dataStuff);

    for (var i = $scope.dataStuff.data.length - 1; i >= 0; i--) {
        if ( $scope.formData.userName == $scope.dataStuff.data[i].ASSIGNED_TO && $scope.dataStuff.data[i].PRIMARY_UCID == "Y" ) {

            console.log($scope.dataStuff.data[i]);
            console.log($scope.dataStuff.data[i].UCID)

            $scope.assignedData.push($scope.dataStuff.data[i]);
            $scope.assignedUCID.push($scope.dataStuff.data[i].SUSPECT_UCID);

        }

    }
    console.log($scope.assignedData)
};

在进入for循环之前,我无法弄清楚我需要向http发布什么语句才能使其完整。

2 个答案:

答案 0 :(得分:3)

for循环必须位于successCallback(或从那里调用的函数中)。

答案 1 :(得分:0)

JavaScript使用回调并且它没有阻塞,我认为你将它与标准命令式代码混淆。

我不知道您使用的是哪个框架,但这是您当前的流程:

  1. 主要功能叫做
  2. 发出GET请求,结果是Promise
  3. 承诺接受两个参数(successCallbackerrorCallback),这两个参数是成功或错误时调用的两个函数(两个中的一个,而不是两个)
  4. 错误:请求获取后立即启动for循环
  5. 正如@ linus-borg指出的那样,for循环需要在successCallback内,否则它将在GET请求之后立即被调用。