我使用angular $q
来创建一个像这样的延迟对象:
var defer = $q.defer();
var promise = defer.promise;
setTimeout(function(defer){
defer.resolve("nothing");
},2000,defer);
promise.then(function(){
//code here
});
所以promise中的代码会延迟2秒,但是我想知道如何在延迟解决后延迟代码执行,这样我就可以延迟代码执行:
promise.delay(1000);
当我从$ http.post()获得承诺时
var promise = $http.post()...;
promise.then(function(){
// code
});
如何延迟代码执行,因为promise已经解决。
答案 0 :(得分:7)
您应该使用$timeout
而不是setTimeout
,这样做的好处还在于已经返回承诺。
要在解决初始承诺后启动延迟,只需将其置于then
回调中:
promise.then(function(){
return $timeout(2000)
}).then(function(){
//code here
});
答案 1 :(得分:1)
只需将此代码放入旋转块即可。
setTimeout(() => {
//Code goes here.
},delayTime);
delayTime是延迟的毫秒数。
答案 2 :(得分:0)
您需要以下内容:
var result = $q.defer();
$timeout(function() {
result.resolve('nothing');
}, 2000);
return result.promise;
然后在任何需要的地方
result.then(function(result) {
// if you need to delay the result handling then you need another $timeout call here like so:
$timeout(function() {
// do something with result
$scope.result = result;
}, 1000);
});
编辑:包含另一个$ timeout调用,以延迟处理已解决的承诺