【发布时间】:2018-04-04 21:35:30
【问题描述】:
在下面的代码中有一个outer 函数和一个inner 函数。 outer 应该是 await inner 并在完成时返回。 inner 返回一个 Promise,它在超时后完成。我希望outer 函数在此Promise 完成后立即返回:
const outer = async () => {
let counter = 0;
const inner = async () => {
console.log('inner');
return new Promise((fulfill, reject) => {
if (++counter === 3) {
console.log('fulfill');
fulfill();
return;
}
setTimeout(() => inner(), 1000);
});
};
return await inner();
};
outer().then(() => console.log('outer done'));
outer 永远不会完成。注意没有outer done输出:
inner
inner
inner
fulfill
在以下代码中,outer 完成。它本身返回一个Promise,inner 函数实现了它:
const outer = async () => {
return new Promise((fulfill, reject) => {
let counter = 0;
const inner = async () => {
console.log('inner');
if (++counter === 3) {
console.log('fulfill');
fulfill();
return;
}
setTimeout(() => inner(), 1000);
};
inner().catch(err => reject(err));
});
};
outer().then(() => console.log('outer done'));
输出:
inner
inner
inner
fulfill
outer done
我认为这两种情况下的行为应该是相似的。任何人都可以看到并解释其中的区别吗?
【问题讨论】:
标签: javascript node.js asynchronous promise async-await