私はNodeを初めて使い、関数を呼び出して、最初の関数の結果に基づいて次の関数を呼び出すかどうかを決定したい。関数は非同期なので、結果はすぐには分かりません。以下のコードはうまくいきますが、今度は非同期関数を追加してそれらをすべて連鎖させたいと思います。Q約束 - 使い方は?
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);
});
}
});
約束を使用してコードを作成します。
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を使っていますが、それを動作させるための構文を理解できません。私のカスタムモジュールを変更して、約束を返すようにするのがベストでしょうか?私はコンセプトを取得しますが、シンタックスは取得しません。どのように実際に行うのですか?
私は次の2つの異なる表記法を使用して脱変性しようとしました。
var doSomethingDN = Q.denodeify(doSomething);
var doAnotherThingDN= Q.denodeify(doAnotherThing);
doSomethingDN(var1, var3)
.then(
if(!data) {
doAnotherThingDN(var1,var2)
}
);
そして、取得した場合、この1
var doSomethingDN = Q.nfbind(doSomething);
var doAnotherThingDN= Q.nfbind(doAnotherThing);
doSomethingDN (var1, var3)
.then(
if(!data) {
doAnotherThingDN(var1,var2)
}
);
ザ・予期しないトークンエラーです。私が削除した場合、両方が実行されますが、doSomethingのboolean結果はプログラムフローを制御することができません。
これは、約束を使用しない非同期コードに約束を追加する一般的なチュートリアルを求めているようです。このことについて既に書かれた1トンがありますので、あなたがそのプロセスで特に理解できないことを理解しているならば、私たちがあなたを助けるのは簡単でしょう。ここでの質問は、一般的な目的のチュートリアルを要求しているように見えるので、あまりにもうまく機能しません。 – jfriend00
"*私のカスタムモジュールを変更して、約束したものを元に戻すことができるでしょうか?" - はい、間違いなく – Bergi
[既存のコールバックAPIを約束に変換するにはどうすればいいですか?](http: //stackoverflow.com/q/22519784/1048572) – Bergi