我是angularjs的新手。如果我对承诺做错了,请纠正我。
doSomething(x)
{
console.log(x);
}
var something = 0;
$http.post('/url')
.then(function (response) {
something = response.data;
})
doSomething(something);
假设变量有价值.. 每次我在doSomething方法中的控制台中记录它。价值 我收到的总是0;
我所做的是把方法放在then子句中。 我得到了正确的价值。
var something = 0;
$http.post('/url')
.then(function (response) {
something = response.data;
doSomething(something);
})
第二个代码是对的吗?还是我在第一段代码中遗漏了什么?
谢谢
答案 0 :(得分:0)
你的第二个代码是对的。因为$ http返回一个promise并且可能需要n次返回,所以它永远不会进入.then,而是触发下一个语句。
所以,如果现在假设您想要执行类似第一个代码的操作,那么您可以使用$ q服务。像这样(但是,我不建议在这里做,因为这里不需要)。
doSomething(x)
{
console.log(x);
}
var defer = $q.defer();
$http.post('/url')
.then(function (response) {
defer.resolve(response.data);
},function (err) {
defer.reject(err);
});
defer.promise.then((data)=>{
doSomething(data);
});