我希望能做类似以下的事情:
delay( 2500 )
.then( function () { console.log( "Step 1 done" ) } )
.then( delay( 7500 ) )
.then( function () { console.log( "Step 2 done" ) } );
因此,延迟的实现已经在许多情况下进行了演示:
function delay( ms ) {
var deferred = Q.defer();
setTimeout( deferred.resolve, ms );
return deferred.promise;
}
但是,如果我在Node.js中运行上面的代码,我会得到以下输出:
... delay of 2500ms
Step 1 done
Step 2 done
... delay of ~7500ms
与我预期看到的不同:
... delay of 2500ms
Step 1 done
... delay of 7500ms
Step 2 done
在https://github.com/kriskowal/q/wiki/Examples-Gallery提供的示例中,我找不到任何将同步函数(返回值而无需回调的函数)与promise函数链接在一起的示例。你有什么想法如何将同步操作与异步promises混合使用? 我已经尝试过:function synchronousPromise() {
var deferred = Q.defer();
console.log( "Synchronous function call" );
deferred.resolve();
return deferred.promise;
}
delay( 2500 )
.then( function(){synchronousPromise()} )
.then( function(){delay( 7500 )} )
.then( function(){synchronousPromise()} );
并且这个将会输出:
... delay of 2500ms
Time now is 2013-06-20
Time now is 2013-06-20
... delay of 7500ms
... 这仍不是我试图实现的。
.then( function() { return delay( 7500 );})
而不是.then( delay( 7500 ) )
吗? - Felix Kling