如何在延迟解决后延迟承诺执行

时间:2016-06-30 02:55:07

标签: javascript promise angular-promise

我使用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已经解决。

3 个答案:

答案 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调用,以延迟处理已解决的承诺