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

时间:2015-09-21 20:45:09

标签: javascript node.js promise q

我有两个函数返回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个值?

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

1 个答案:

答案 0 :(得分:1)

如果你使用链式响应,那么第一个Promise的值将通过continuation传递给第二个,所以你的[PDOException] SQLSTATE[HY000] [14] unable to open de database file. 应该接受一个参数:

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)); api,因为它被视为anti-pattern