Я хочу сделать что-то вроде следующего:Могу ли я сделать синхронное обещание в библиотеке JavaScript Q?
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 Я не могу найти примеры синхронных функций (функций, возвращающих значение без каких-либо обратных вызовов), прикованных с функциями обещания.
Любые идеи, как смешивать синхронные действия с асинхронными обещаниями?
Я пробовал:
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))'? –
@FelixKling, который работает для первого и второго примеров! Сделайте свой ответ, и я соглашусь. –
Теперь вы можете достичь этого, не указав время задержки на проверку моего [ответа] (http://stackoverflow.com/questions/17213297/can-i-make-a-synchronous-promise-in-the-javascript-q -library/33298652 # ответ-33298652). –