Jak faktycznie używać Q promise w węźle.js?
To może być pytanie nooba, ale jestem nowy w obietnicach i staram się dowiedzieć, jak używać Q w node.js.
Widzę tutorial zaczyna się od
promiseMeSomething()
.then(function (value) {}, function (reason) {});
Ale nie rozumiem, skąd dokładnie się wzięło. Chyba pochodzi z
var outputPromise = getInputPromise()
.then(function (input) {}, function (reason) {});
Ale skąd pochodzi getInputPromise()
? Nie znalazłem o tym żadnej wzmianki.
Włączyłem go do mojego projektu tak
var Q = require('q');
// this is suppose, the async function I want to use promise for
function async(cb) {
setTimeout(function () {
cb();
}, 5000);
}
async(function () {
console.log('async called back');
});
Jak używać Q
i jego .then
tutaj w moim przykładzie?
1 answers
promiseMeSomething()
zwróci obiekt obietnicy Q, który będzie miał then
funkcję w nim, która jest zdefiniowana , Jak to
Promise.prototype.then = function (fulfilled, rejected, progressed) {
Najprostszym sposobem utworzenia obiektu obietnicy byłoby użycie konstruktora funkcji Q
, Jak to
new Q(value)
Utworzy nowy obiekt promise. Następnie możesz dołączyć elementy obsługi sukcesu i porażki, w ten sposób
new Q(value)
.then(function(/*Success handler*/){}, function(/*Failure handler*/){})
Ponadto, jeśli przekażesz pojedynczą funkcję w stylu nodejs do funkcji .then
, wywoła ona tę funkcję z wartość sukcesu jak ta
callback(null, value)
Lub jeśli jest problem, to
callback(error)
Dla Twojego konkretnego przypadku, setTimeout
przyjmuje funkcję, która ma być wywołana jako pierwszy parametr. Tak więc potrzeba kilku linijek kodu, aby to naprawdę działało z obietnicami. Więc Q
ma wygodną funkcję, do tego celu, Q.delay
, które mogą być używane w ten sposób
var Q = require('q');
function async() {
return Q.delay(1000)
}
async()
.then(function() {
console.log('async called back');
});
Możesz napisać krócej tak
Q.delay(1000)
.then(function() {
console.log('async called back');
});
Jeśli chcesz wywołać funkcję callback z someother value, then you can do it like this
Q.delay(1000, "Success")
.then(function(value) {
console.log('async called back with', value);
});
To będzie przydatne, gdy chcemy mieć opóźnienie między dwiema funkcjami, a druga funkcja jest zależna od pierwszej funkcji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 05:47:46