Q promise - 如何使用它?

Q promise - how to use it?

我是Node新手,想调用一个函数,根据第一个函数的结果判断是否调用下一个函数。这些函数是异步的,因此不会立即知道结果。以下代码工作正常,但现在我想添加更多异步函数并将它们链接在一起。

var doSomething = require('./custom-module1.js'); //returns a boolean
var doAnotherThing = require('./custom-module2.js'); //returns a double

var var1 = process.argv[2];
var var2 = process.argv[3];
var var3 = process.argv[4];

doSomething(var1, var3, function(data) {
    if (data) {
        doAnotherThing(var1,var2, function(data){
            console.log(var1 + ' is value: ' + data);
        });
    }
});

我想使用 promises 使代码像这样。

getListOfStuff()
.then(
    for(i=0;i<data.length;i++) {
        doSomething(data[i], var3)
        .then(
          if (doSomething returns true) {
            doAnotherThing(data[i], var2)
            .then(doYetAnotherThing(data[i]))
            .then(andEvenMoreThingsToBeDone(data[i]))
          }
        );
    }
);

我阅读了有关 q 和使用 denodefiy 的内容,但我无法理解使其工作的语法。最好将我的自定义模块修改为 return promises 以便它们本身就可用吗?我知道概念但不知道语法,我该怎么做?

我尝试使用以下两种不同的表示法去节点化。

var doSomethingDN = Q.denodeify(doSomething);
var doAnotherThingDN= Q.denodeify(doAnotherThing);

doSomethingDN(var1, var3)
.then(
    if(!data) {
        doAnotherThingDN(var1,var2)
    }
);

还有这个

var doSomethingDN = Q.nfbind(doSomething);
var doAnotherThingDN= Q.nfbind(doAnotherThing);

doSomethingDN (var1, var3)
.then(
    if(!data) {
        doAnotherThingDN(var1,var2)
    }
);

if get 是一个意外的令牌错误。如果我同时删除 运行 但 doSomething 的布尔结果无法控制程序流程。

您仍然需要使用带有承诺的回调函数:

doSomethingDN (var1, var3)
.then(function(data) {
//    ^^^^^^^^^^^^^^^^
    if (!data) {
        return doAnotherThingDN(var1,var2)
    }
}); /*
^

您收到语法错误,因为您将函数体作为 then 的参数。