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?

Author: thefourtheye, 2014-03-27

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.

 19
Author: thefourtheye,
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