Voglio fare qualcosa di simile al seguente:Posso fare una promessa sincrona nella libreria Q JavaScript?
delay(2500)
.then(function() { console.log("Step 1 done") })
.then(delay(7500))
.then(function() { console.log("Step 2 done") });
Così è stata dimostrata l'attuazione di ritardo molte volte prima:
function delay(ms) {
var deferred = Q.defer();
setTimeout(deferred.resolve, ms);
return deferred.promise;
}
Ma se corro il suddetto in node.js ottengo:
... delay of 2500ms
Step 1 done
Step 2 done
... delay of ~7500ms
piuttosto che quello che mi aspetto di vedere:
... delay of 2500ms
Step 1 done
... delay of 7500ms
Step 2 done
Negli esempi forniti su https://github.com/kriskowal/q/wiki/Examples-Gallery non riesco a trovare alcun esempio di funzioni sincrone (funzioni che restituiscono un valore senza alcuna callback implicata) concatenato con funzioni promettenti.
Qualche idea su come mischiare azioni sincrone con promesse asincrone?
ho provato:
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()});
E questo uscite:
... delay of 2500ms
Time now is 2013-06-20
Time now is 2013-06-20
... delay of 7500ms
.. ancora non è quello che sto cercando di realizzare.
Nel tuo primo esempio, hai provato '.then (function() {return delay (7500);})' invece di '.then (delay (7500))'? –
@FelixKling che funziona per il primo e il secondo esempio! Fai quella tua risposta e io accetterò. –
È ora possibile ottenere ciò senza dover specificare il tempo di ritardo per verificare la mia [risposta] (http://stackoverflow.com/questions/17213297/can-i-make-a-synchronous-promise-in-the-javascript-q -library/33298652 # risposta-33298652). –