Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何等待响应来自$http请求并在angularjs中的$scope变量中赋值?_Angularjs - Fatal编程技术网

如何等待响应来自$http请求并在angularjs中的$scope变量中赋值?

如何等待响应来自$http请求并在angularjs中的$scope变量中赋值?,angularjs,Angularjs,情况就是这样: $scope.signupNow = function () { retrieveData(); console.log($scope.userid); } function retrieveData(){ // ** some http request ** $scope.userid = id; } 现在,http请求需要一些时间来执行,“$scope.userid”中没有任何值,因为它只是在调用函数后打印出来的 您能建议如何等到响应到来吗???

情况就是这样:

$scope.signupNow = function () {
  retrieveData();
  console.log($scope.userid);
}

function retrieveData(){
    // ** some http request **
    $scope.userid = id; 
}
现在,http请求需要一些时间来执行,“$scope.userid”中没有任何值,因为它只是在调用函数后打印出来的


您能建议如何等到响应到来吗???

好的,如果您想等到http响应,那么您可以使用回调函数

$scope.signupNow = function () {

  retrieveData().then(funtion(response) {
    console.log(response.data);
    // do here what you need
  });
}

function retrieveData(){
  return $http.get('url');
}
$scope.signupNow = function () {

    retrieveData(function(){

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

function retrieveData(callback){
    // ** some http request **
    $scope.userid = id; 
    callback();
}

好的,如果你想等到http响应,那么你可以使用回调函数

$scope.signupNow = function () {

    retrieveData(function(){

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

function retrieveData(callback){
    // ** some http request **
    $scope.userid = id; 
    callback();
}

使用angularJs承诺-

$scope.signupNow = function () {
   var promise  = retrieveData();
   promise.then(function(success) {
     console.log($scope.userid);
   }, function(reason) {
     alert('Failed: ' + reason);
   });

 }


function retrieveData(){
 var deferred = $q.defer();
 (your http request).then(){
   $scope.userid = id;
   deferred.resolve('success');
  }
  return deferred .promise;
}

使用angularJs承诺-

$scope.signupNow = function () {
   var promise  = retrieveData();
   promise.then(function(success) {
     console.log($scope.userid);
   }, function(reason) {
     alert('Failed: ' + reason);
   });

 }


function retrieveData(){
 var deferred = $q.defer();
 (your http request).then(){
   $scope.userid = id;
   deferred.resolve('success');
  }
  return deferred .promise;
}

在回调函数中写下您的代码。这是由于AJAX的
async
behave造成的。将代码放入
。然后(function(){
--code--
})
您是否阅读过Angular网站上的$http文档?它非常清楚地描述了承诺的使用(你可能想阅读一下这个主题)。这是由于AJAX的
async
behave造成的。将代码放入
。然后(function(){
--code--
})
您是否阅读过Angular网站上的$http文档?它非常清楚地描述了承诺的使用(你可能想阅读一下这个主题)。抱歉,伙计,上面的错误是“retrieveData()未定义”。在javascript中,命名函数在运行时被提升到文件的顶部,因此它应该被定义。抱歉,伙计,上面的错误是“retrieveData()IsUndefined“在javascript中,命名函数在运行时被提升到文件的顶部,因此应该对其进行定义。