javascript – 如何“等待”回调回调?
作者:互联网
使用简单回调时,例如下面的示例:
test() {
api.on( 'someEvent', function( response ) {
return response;
});
}
如何将函数更改为使用async / await?具体来说,假设’someEvent’保证只被调用一次,我希望函数test是一个异步函数,在执行回调之前不会返回,例如:
async test() {
return await api.on( 'someEvent' );
}
解决方法:
async / await不是魔法.异步函数是一个可以为你解包Promise的函数,所以你需要api.on()来返回一个Promise来实现它.像这样的东西:
function apiOn(event) {
return new Promise(resolve => {
api.on(event, response => resolve(response));
});
}
然后
async function test() {
return await apiOn( 'someEvent' ); // await is actually optional here
// you'd return a Promise either way.
}
但这也是一个谎言,因为异步函数本身也会返回Promise,所以你不会真正从test()中获取值,而是一个值的Promise,你可以这样使用:
async function whatever() {
// snip
const response = await test();
// use response here
// snip
}
标签:ecmascript-2017,javascript,asynchronous,async-await,callback 来源: https://codeday.me/bug/20190917/1809204.html