如何使用嵌套函数更新变量?

时间:2017-04-06 15:55:51

标签: javascript angularjs

以下是示例代码

function() {
    var test = 0;
    var url = 'http://test.php';
    var user_id = 1;
    $http.post(url,{user_id: user_id})
    .then(function (response){ 
         test = response.something;
    })
    console.log(test)
}

它返回值0.我需要它来返回response.something。

2 个答案:

答案 0 :(得分:2)

您没有调用调用test = 1

的函数

您可以将内部函数包装在IIFE

function() {
    var test = 0;
    (function(){
        test = 1;
    })() // Call the expression immediately
    console.log(test)
}

编辑问题更新

console.log(test)发生在$http.post()的承诺解决之前,您需要在console.log()回调中移动then()

function() {
    var test = 0;
    var url = 'http://test.php';
    var user_id = 1;
    $http.post(url,{user_id: user_id})
    .then(function (response){ 
         test = response.something;
         console.log(test) // Move console.log inside promise then
    })

}

答案 1 :(得分:0)

这是因为$http.post是异步方法调用。当您的代码在运行时进入console.log调用时,来自$http.post的数据可能尚未返回,因此它将记录旧值而不是新值。

如果要在返回post请求后console.log值,则应将console.log语句移动到then块,该块仅在返回调用后运行。

function() {
    var test = 0;
    var url = 'http://test.php';
    var user_id = 1;
    $http.post(url,{user_id: user_id})
    .then(function (response){ 
         test = response.something;
         console.log(test) // Move console.log inside promise then
    })

}

如果这对您不起作用,那是因为您的电话可能由于某种原因而失败。在这种情况下,您可以提供一个额外的功能来处理错误。

function() {
    var test = 0;
    var url = 'http://test.php';
    var user_id = 1;
    $http.post(url,{user_id: user_id})
    .then(function (response){ 
         test = response.something;
         console.log(test) // Move console.log inside promise then
    }, function(err) {
       test = err;
       console.log(test)
    });
   }