运行 Q Promise 中的顺序函数 (Node.js)

Running sequential functions in Q Promise (Node.js)

我有两个函数 return a Q Promise:

var q = require('q');

var get1 = function () {
    var deferred = q.defer();
    deferred.resolve('hello world');

    return deferred.promise;
};

var get2 = function () {
    var deferred = q.defer();
    deferred.resolve('hello world 2');

    return deferred.promise;
};

我可以这样称呼他们每个人:

get1().then(console.log,console.error);

现在,我想按顺序调用它们。怎么样?

我试过这个:

q.fcall(self.get1)
        .then(self.get2);

但是在这个方法中我怎样才能将参数传递给函数呢?我怎样才能得到它们每个的 resolvereject 值?

我想按顺序 运行 它们,即使其中一个在其主体中有异步进程。

如果您使用链式响应,第一个 Promise 的值将通过延续传递给第二个,因此您的 get2 应该接受一个参数:

var get1 = function () {
    var deferred = q.defer();
    deferred.resolve('hello world');

    return deferred.promise;
};

var get2 = function (result) {
    var deferred = q.defer();
    deferred.resolve(result + 2);

    return deferred.promise;
};

//Then you can use it like so
get1().then(get2).then(console.log.bind(console), console.error.bind(console));

另请注意,您应尽可能避免使用 defer api,因为它被认为是 anti-pattern.