gpt4 book ai didi

javascript - 如何判断请求/ promise 是否需要超过 5 秒才能完成,Angular JS

转载 作者:行者123 更新时间:2023-12-03 06:57:50 26 4
gpt4 key购买 nike

我是一名新开发人员,正在尝试检查 promise 是否在 5 秒后尚未得到解决。在不创建新指令/服务/工厂的情况下执行此操作的最易读的方法是什么?这是我尝试过的,我的主要问题是,当实例化 Promise 变量时,我是否在正确的时间设置了间隔?

  $scope.promiseTimeLimit = false;
//if the promise does not return within 5 seconds, show a "service down" warning.
var promise = service.checkValidRailCar($scope.railcar.number, $scope.railcar.initials);

$interval(function () {
$scope.promiseTimeLimit = true
}, 5000)

if ($scope.promiseTimeLimit) {
$scope.message = {
content: [{
title: '',
msg: 'The Service Is Down'
}],
type: 'error'
};
return;
}
promise.then(function (data) {
if (!data.valid) {
$scope.invalidData = true;
$scope.message = {
content: [{
title: '',
msg: 'Invalid: This is not a valid data and can not be created.'
}],
type: 'error'
};
} else {
$scope.invalidData = false;
}
})

最佳答案

是的,您在实例化 Promise 后已经正确设置了间隔。但是,我认为您不想在这里使用 $interval 。您可能需要使用$timeout。除非清除$interval,否则$interval中的回调函数将被一次又一次地调用。 $timeout 中的回调函数只会被调用一次。如果您只想检查一次 Promise 是否在 5 秒内得到解决,则应该使用 $timeout

第二件事是关于以下代码:

if ($scope.promiseTimeLimit) {
$scope.message = {
content: [{
title: '',
msg: 'The Service Is Down'
}],
type: 'error'
};
return;
}

您需要将此代码保留在 $timeout 函数中。为了更好地理解,我将变量名称 $scope.promiseTimeLimit 更改为 $scope.promiseComplete 并将其初始化为 $scope.promiseComplete = false .

$timeout(function () {
if(!$scope.promiseComplete) {
$scope.message = {
content: [{
title: '',
msg: 'The Service Is Down'
}],
type: 'error'
};
}
}, 5000);

然后,在promise.then函数(resolve)中,您需要将$scope.promiseComplete设置为true。

promise.then(function (data) {
$scope.promiseComplete = true;
if (!data.valid) {
...
})

那么,这里发生了什么? $timeout 回调函数将在 5 秒或之后调用。它将检查 $scope.promiseComplete 是否为 false。如果为 false,则生成警告消息。如果为真,则不执行任何操作。在 promise.then 中,我们将 $scope.promiseComplete 设置为 true。因此,如果在调用 $timeout 回调函数之前 promise.then function(resolve) 将 $scope.promiseComplete 设置为 true,则意味着 Promise 在 5 秒之前完成。

我创建了一个示例 plunker 来理解这种行为。您可以查看HERE .

关于javascript - 如何判断请求/ promise 是否需要超过 5 秒才能完成,Angular JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37193676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com