Я хочу сделать что-то вроде следующего:
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, я не могу найти примеров синхронных функций (функций, возвращающих значение без каких-либо обратных вызовов), прикованных с функциями обещания.
Любые идеи, как смешивать синхронные действия с асинхронным 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
.. все еще не то, что я пытаюсь достичь.