我有以下代码,如果承诺在五秒后没有返回,则会显示一条消息:
$timeout(function () {
if (!$scope.promiseComplete && $scope.submitted) {
$scope.message = {
content: [{
title: '',
msg: 'Service down - created'
}],
type: 'error'
};
return;
}
}, 5000)
我的困境是,我只想显示此消息本身两秒钟。我尝试了以下内容,它奏效了,它是"嵌套"超时的反模式吗?
$timeout(function () {
if (!$scope.promiseComplete && $scope.submitted) {
$scope.message = {
content: [{
title: '',
msg: 'Service down - Railcar ASN created'
}],
type: 'error'
};
$timeout(function(){
$scope.message = null;
}, 2000)
return;
}
}, 5000)
更新:根据答案,这是我去的:
$timeout(function () {
if (!$scope.promiseComplete && $scope.submitted) {
$scope.message = {
content: [{
title: '',
msg: 'Service down - created'
}],
type: 'error'
};
return $timeout(function(){
$scope.message = null;
}, 2000)
}
}, 5000)
$timeout
是基于承诺的,它会返回一个可以链接的承诺。是的,嵌套$timeout
或任何其他承诺可能是反模式。
这种承诺链
$timeout(function () {
if (!$scope.promiseComplete && $scope.submitted) {
...
return $timeout(function(){
$scope.message = null;
}, 2000)
}
}, 5000)
保证嵌套不会超过2级,并且可以使用top $timeout
返回的promise,整个Promise链可以扩展或测试。