当使用一个简单的回调时,如下面的例子:
test() {
api.on( 'someEvent', function( response ) {
return response;
});
}
如何将函数更改为使用async / await?具体来说,假设'someEvent'保证被调用一次且仅调用一次,我希望函数test是一个异步函数,直到执行回调才返回,例如:
async test() {
return await api.on( 'someEvent' );
}
当使用一个简单的回调时,如下面的例子:
test() {
api.on( 'someEvent', function( response ) {
return response;
});
}
如何将函数更改为使用async / await?具体来说,假设'someEvent'保证被调用一次且仅调用一次,我希望函数test是一个异步函数,直到执行回调才返回,例如:
async test() {
return await api.on( 'someEvent' );
}
6条答案
按热度按时间yfjy0ee71#
async/await
不是魔术。async函数是一个可以为你解包Promises的函数,所以你需要api.on()
返回一个Promise才能工作。类似于这样:然后
但这也是一个谎言,因为async函数也会返回Promises本身,所以你实际上不会从
test()
中获取值,而是一个值的Promise,你可以这样使用:u59ebvdq2#
没有一个简单的解决方案是很烦人的,而且 Package
return new Promise(...)
很糟糕,但是我发现了一个使用util.promisify
的好的解决方案(实际上它也做了同样的 Package ,只是看起来更好)。上面的函数还没有返回任何东西。我们可以通过执行以下操作使它返回传入
callback
的response
的Promise
:现在我们实际上可以
await
callback
。使用
util.promisify
时的一些规则callback
必须是promisify
函数的最后一个参数(err, res) => {...}
有趣的是,我们不需要特别写
callback
实际上是什么。9bfwbjaz3#
async/await很神奇,你可以创建一个函数
asPromise
来处理这种情况:然后在需要时使用它:
args的数量是可变的。
5jvtdoz24#
你可以不使用回调函数来实现,使用promise async await来代替回调函数,这里我是这样做的,这里我还演示了两个处理错误的方法
laik7k3q5#
b0zn9rqh6#
定义一个返回promise的函数:
在任何你需要的地方等待promise。arg1,arg2,...是回调函数参数: