如何在Angular $ timeout中解析Promise

时间:2018-07-02 21:49:22

标签: angularjs angular-promise

对于回调,我将回调包装在Angular $ timeout块中,以便更新UI。

function makeServerRequest(callback) {
  $timeout(callback);
}

makeServerRequest((response) => {
  $scope.updateUI();
})

这在Angular摘要周期内运行,并且UI得到更新。

但是,这不起作用:

function makeServerRequest() {
  return new Promise((resolve, reject) => {
    $timeout(() => {
      resolve();
    });
  })
}

makeServerRequest().then(() => {
  $scope.updateUI();
})

在这种情况下,似乎解决了,在超时后调用然后 $scope.updateUI();

如何在超时内包装resolve,以使外部.then在超时内被调用?

2 个答案:

答案 0 :(得分:0)

Native Promise不会触发摘要,在这种情况下应手动触发:

A

并且$ timeout已经返回了一个承诺($ q promise,这是摘要友好的)。因此,无需创建新的,尤其是本机的。

可以是:

makeServerRequest().then(() => {
  $scope.updateUI();
  $scope.$apply()
})

答案 1 :(得分:0)

您需要做的是从服务器请求API创建$ q许诺:

function makeServerRequest() {
  return $q((resolve, reject) => {
     var callback = resolve;
     ServerRequest(callback);
  });  
}

makeServerRequest().then(() => {
  $scope.updateUI();
})

由于$ q服务已与AngularJS框架及其摘要周期集成在一起,因此无需使用$timeout

有关更多信息,请参见AngularJS $q Service API Reference - $q constructor