を返すコードサンプルです:Baconjsはここだけで、最後のデバウンス値
let watcher;
const streamWatcher = bacon.fromBinder(sink => {
watcher = chokidar.watch(root, {
ignored: /(^|[\/\\])\../
});
watcher.on('all', (event, path) => {
sink({
event: event,
path: path
});
return() => {
watcher.unwatch(root);
};
});
});
streamWatcher
.skipDuplicates(_.isEqual)
.map('.path')
.scan([], (a, b) => {
a.push(b);
return a;
})
.debounce(300)
.onValue(files => {
if (files.length) {
console.log('change event fired');
tinyLrSrv.changed({
body: {
files: files
}
});
}
});
私がやろうとしていますどのようなラップするBacon.js
を使用して、フォルダの変更(開発中のウェブディレクトリ)を見て、デバウンスchokidarを使用することです(私は各ファイルの変更を知りたくないので、バッチで私に教えてください)、変更されたファイルの配列を返します。
問題は、配列が最初からあるため、毎回ファイルが変更されるだけで、元の配列に追加され続けます。
onValue
がアレイを受け取るたびに、最後に変更されたファイルの配列が得られます。アレイを保持する変数はリセットする必要があります。
純粋なbacon.jsの方法はありますか?
私はこれを試しましたが、サブシーケンスデータは空に戻ります。私は 'scan'を使うことを意味しますが、私はdoActionを試していません。試してみましょう。 –
doActionが機能します。スキャンでは(onValueの後の配列をリセットしなくても)、これはBacon.jsの面白い動作です –
特定のアプローチ(スキャンに基づくものは何か?あなたはbacon.js githubコードベースに対してIssueを投稿することができます。実行可能なコードを含めてください。 – raimohanska