编程语言
首页 > 编程语言> > javascript – 如何“等待”回调回调?

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