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
的参数。
我是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
的参数。