对于回调,我将回调包装在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在超时内被调用?
答案 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。