Javascript 异步函数作为参数而不是Promise传递,显示不同的结果
我使用的是PWA,cache.open方法以promise作为参数。正常的代码流如下所示:Javascript 异步函数作为参数而不是Promise传递,显示不同的结果,javascript,ecmascript-6,promise,async-await,progressive-web-apps,Javascript,Ecmascript 6,Promise,Async Await,Progressive Web Apps,我使用的是PWA,cache.open方法以promise作为参数。正常的代码流如下所示: event.waitUntil( caches.open().then().catch(); ); // output: as expected 我将参数更改为显式承诺和异步func。promise的工作方式与预期的相同,但异步函数不是 许诺 event.waitUntil( new Promise(resolve => { console.log('test');
event.waitUntil(
caches.open().then().catch();
);
// output: as expected
我将参数更改为显式承诺和异步func。promise的工作方式与预期的相同,但异步函数不是
许诺
event.waitUntil(
new Promise(resolve => {
console.log('test');
resolve();
})
);
// output: as expected
异步函数
event.waitUntill(async () => await console.log('test'));
// output: no output
我想知道为什么异步函数不能按预期工作,即使异步本身返回一个承诺 正如Mark在注释中提到的,异步函数在调用时返回承诺。它们本身不是承诺。要使其工作,您需要调用该异步函数。您可以将异步函数视为承诺生成器。这将使它发挥作用:
const asyncFn = async () => await console.log('test')
event.waitUntill(asyncFn());
在上一个示例中,您不是在传递承诺,而是在传递函数。如果你调用这个函数,你会得到一个承诺。哦,为什么我没有想到这个。我可以在生活中包装异步,使其工作。非常感谢。。