私はES6の約束事を理解しようとしています。そこには1秒間、私はそれがあると思っていましたが、私はそうは思わないでしょう。なぜ、最初のものが最初のものの前に返されますか?
私はたくさんのファイルを作成して読みたいと思っていますが、この操作が完了した後で次の操作を行うために移動してください。私にとって、これはPromisesにうまく当てはまりますが、最初の操作が完了する前に2回目の操作が復帰している理由を混乱させています。
私は約束を返す関数ensureFileExists
を作成しました。これをコールバックとしてfileNames.map
に渡します。これはコンソールにtrue
の配列を記録します。これは私が期待しているものです。しかし私の混乱は、私の最初のthen
が完了した後に私の最初のthen
が呼び出されると思った。
私の最初のthen
の前に私の2番目のthen
がなぜ戻ってくるのか誰でも詳しく説明できたら、私は感謝します。
getFileNames(ensureFileExists) {
for(let i = 0; i < this.fileCount; i++) {
this.fileNames.push(this.generateRandomfileNames());
};
Promise.all(this.fileNames.map((file) => ensureFileExists(file)))
.then(values => console.log(values))
.then(console.log(1)) // Why is this logged before values???
.catch(err => console.log(err))
};
ensureFileExists(file) {
return new Promise((resolve, reject) => {
let filePath = path.join(this.src, file);
fsExtra.ensureFile(filePath, (err) => {
if (err === 'undefined') {
reject(new Error('Error creating file'));
} else {
resolve(true);
}
});
})
};