関数f1とf2が終了した後で関数cbを呼び出すようにしたい(f1とf2は非同期であり、 。他の非同期関数が実行された後に関数を呼び出す
私はこのようなものを実装しようとしていますが、node.jsでこれを行うのが最善の方法ではないようです。
var l1 = false;
var l2 = false;
// function to be called after f1 and f2 have ended
function cb(err, res) {
if (err) {
console.log(err);
} else {
console.log('result = ' + res);
}
}
// f1 and f2 are practically identicals...
function f1(callback) {
console.log('f1 called');
l1 = true;
if (l2) {
console.log('f1 calling cb');
callback(null, 'one');
} else {
console.log('f2 wasn\'t called yet');
}
}
function f2(callback) {
console.log('f2 called');
l2 = true;
if (l1) {
console.log('f2 calling cb');
callback(null, 'two');
} else {
console.log('f1 wasn\'t called yet');
}
}
setTimeout(function() {
f1(cb); // will call cb
}, 3000);
setTimeout(function() {
f2(cb); // won't call cb
}, 1000);
// It will print:
// f2 called
// f1 wasn't called yet
// f1 called
// f1 calling cb
// result = one
これを達成するための約束を使用してください。 – Akhoy
外部ライブラリを使用しますか?このようなシナリオや[async](https://github.com/caolan/async)という他の多くのシナリオで一般的なものがあります。あなたが喜んでいると言うなら、私はこの特定のシナリオにそれを適用する方法を説明する答えを書くでしょう。 –
はい、確かに、私は外部ライブラリを使用したソリューションを探していました。私は非同期モジュールを調べましたが、役に立たないものは見つかりませんでした。 – orangesky