Javascript 异步函数作为参数而不是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');

我使用的是PWA,cache.open方法以promise作为参数。正常的代码流如下所示:

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());

在上一个示例中,您不是在传递承诺,而是在传递函数。如果你调用这个函数,你会得到一个承诺。哦,为什么我没有想到这个。我可以在生活中包装异步,使其工作。非常感谢。。