角度承诺错误

时间:2018-01-04 09:30:47

标签: angularjs

我是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);
})

第二个代码是对的吗?还是我在第一段代码中遗漏了什么?

谢谢

1 个答案:

答案 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);
});