【发布时间】:2017-02-26 14:04:45
【问题描述】:
let val = 0;
async function first() {
console.log('1a', val);
second();
console.log('1b', val);
}
async function second() {
console.log('2a', val);
third();
console.log('2b', val);
}
async function third() {
console.log('3a', val);
val = await new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(3);
}, 1000);
});
console.log('3b', val);
}
console.log('0a', val);
first();
console.log('0b', val);
我期待:
0a 0
1a 0
2a 0
3a 0
3b 3
2b 3
1b 3
0b 3
但我收到了:
0a 0
1a 0
2a 0
3a 0
2b 0
1b 0
0b 0
3b 3
我猜有一个我不知道的关于异步的基本问题?
【问题讨论】:
-
只有
third是await的承诺结果,所有其他函数同步执行。除非你awaitfirst和second,否则他们会立即返回。 -
好吧,我对
await和async了解不多,但可以肯定的是,超时部分基本上允许其余代码完成,而await等待超时完成? (或更具体地,Promise完成) -
等等,什么版本的nodejs甚至支持这种语法?我已经尝试使用 v6.8.1,但它会引发语法错误。
-
@freakish 7 带有 --harmony 标志 node.green/#async-functions
标签: javascript node.js promise async-await ecmascript-2017