以下是示例代码
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。
答案 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)
});
}