【发布时间】:2016-01-24 13:43:43
【问题描述】:
我的问题是下面的代码示例只会返回 Promise 对象并且 async/await 根本不起作用。
import 'babel-polyfill';
function doAsync() {
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve('result')
}, 2000)
})
}
async function doStuff() {
try {
return await doAsync()
} catch (err) {
console.err(err);
}
};
doStuff() // Returns the promise object
console.log('log') // Runs before timeout
Babel 配置
{
presets: ["es2015"],
plugins: [
"transform-class-properties",
"syntax-decorators",
"transform-decorators-legacy",
"syntax-async-functions",
"transform-regenerator"
]
}
【问题讨论】:
-
“根本不起作用”是什么意思?我可能错了,但 AFAIK 异步函数返回承诺。
-
这意味着 Babel 应该使用 regenerator 转换代码,等待 promise 得到解决。最后一个 console.log() 应该只在 promise 解决后运行(在 setTimeout 之后)
-
@wintercounter:你没有
awaitdoStuff()。或者将你的日志语句放在await之后的函数中(删除return),等待超时。 -
@wintercounter:只有
async functions 会被再生器转化。不会隐式等待对这些函数的调用;为什么会这样? -
@bgoscinski 除非它在另一个
async函数中否则不会:D
标签: javascript async-await ecmascript-6 babeljs