我是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但我无法理解使其工作的语法。是否最好修改我的自定义模块以返回承诺,以便它们本身就可以找到?我得到了概念而不是语法,我该怎么做呢?
我尝试使用以下两种不同的符号进行去极化。
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的布尔结果无法控制程序流。
答案 0 :(得分:0)
你仍然需要使用promises的回调函数:
doSomethingDN (var1, var3)
.then(function(data) {
// ^^^^^^^^^^^^^^^^
if (!data) {
return doAnotherThingDN(var1,var2)
}
}); /*
^
您收到语法错误,因为您将函数体作为参数放到then
。