我试图理解 ES6 的 promise ,有那么一瞬间,我以为我已经明白了,但我想没有。
所以我想创建/读取一堆文件,并且只有在该操作完成后,才继续执行下一个操作。对我来说,这非常适合 Promise,但我很困惑为什么我的第二个操作在第一个操作完成之前就返回了。
我创建了一个函数ensureFileExists
它返回一个 promise ,我将其作为回调传递到 fileNames.map
。这会记录 true
的数组到控制台,这正是我所期望的。但我的困惑是,我以为我借调的then
只有在我的第一个 then
之后才会被调用已完成。
如果有人可以详细说明为什么我的第二个 then
在我的第一个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);
}
});
})
};
最佳答案
这一行:
.then(console.log(1))
立即调用console.log
,并将返回值传递给then
方法。
您可能想要更像前一行中的回调函数的东西,如下所示:
.then(() => console.log(1))
关于javascript - 为什么第二个然后在第一个之前返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41784159/