1
たとえば、異なる場所にfs.readdir、fs.copyなどの2つまたは3つの独立した部分があるnodejsプログラムを作成したいとしますが、3つのアクションのすべてがこのようなJSONファイル:それへ前のアクションが最初に実行された後nodejsで非同期プログラムを書くには?
var fs = require('fs-extra');
var jsd = {
"act1" : false,
"act2" : false,
"act3" : false
}
fs.readdir(path1, function (err, files) {
if (err) jsd.act1 = err;
for (x in files) console.log(files[x]);
jsd.act1 = true;
});
fs.copy(path2, path3, function (err) {
if (err) jsd.act2 = err;
jsd.act2 = true;
});
fs.remove(path4, function (err) {
if (err) jsd.act3 = err;
jsd.act3 = true;
});
// all three of the above actions are independent, so it makes sense that all of them are executed asynchronously.
// Now we write jsd object to a json file; jsd's contents are dependent on the above actions though
fs.writeJson("./data.json", jsd, function (err, files) {
if (err) return console.error(err);
});
どのように私は、正しいデータがファイルdata.jsonに入力されていることを確認しない、すなわちfs.writeJsonを実行しますか?
私は1つの方法を知っているが、それらの巣のすべて、すなわち、
readdir() {
copy() {
remove() {
writeJson();
}
}
}
にある。しかし、これは、コールバック地獄をもたらすことができるので、これを行うには良い方法はありますか?
あなたが約束を使用する場合はまず、あなたはこのように約束にすべてのコールバック関数を変換する必要があり、約束またはモジュールの非同期、 を使用することができます
これは非同期で行う必要がありますか?これは、あなたが物事を並行してやっているということを意味しません。これらのfs関数の同期バージョンを使用して、よりシンプルにすることができます。 –
約束。あなたは約束を見ましたか? –
確かに、私はこれらの同期バージョンについて知っていますが、これらの非同期プロパティを使用しないでください。ノードが知られています – user3248186