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

Javascript 如何在延迟解决后延迟承诺的执行,javascript,promise,angular-promise,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.delay(1000); 因此,promise中的代码将延迟2秒,但我想知道如何在延迟解

我使用angular
$q
创建了如下延迟对象:

var defer = $q.defer();
var promise = defer.promise;

setTimeout(function(defer){
    defer.resolve("nothing");
},2000,defer);

promise.then(function(){
    //code here
});
promise.delay(1000);
因此,promise中的代码将延迟2秒,但我想知道如何在延迟解决后延迟代码执行,以便我可以像这样延迟代码执行:

var defer = $q.defer();
var promise = defer.promise;

setTimeout(function(defer){
    defer.resolve("nothing");
},2000,defer);

promise.then(function(){
    //code here
});
promise.delay(1000);
当我得到$http.post()的承诺时


如何延迟代码的执行,因为promise已解决。

您需要以下内容:

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

只需将此代码放入旋转块中即可

setTimeout(() => {
   //Code goes here.
},delayTime);
delayTime是延迟的毫秒。

您应该使用而不是
setTimeout
,这也有返回承诺的好处

要仅在解决初始承诺后才开始延迟,只需将其放入
然后
回调中:

promise.then(function(){
    return $timeout(2000)
}).then(function(){
    //code here
});

“延迟解决后”是什么意思?您指的是哪个延迟?@kazenorin var defer=$q.defer();这个延迟,在settimeout中,延迟从外面传递出去。现在我就照你说的做。但我的问题是如何更改结果的延迟时间。我不确定我是否理解您的需要,但我会更新我的回答谢谢。但不是我想要的。谢谢。它工作得很好。当我这样写“var promise1=promise.then(function(){return$timeout(2000)}”);return promise1;”时,您可能希望传递第一个promise中的数据,以便最后一个
。then()
可以访问第一个promise中的值。@jfriend00:这在角度上看起来很难看:
promise.then(x=>$timeout()=>x,2000))