3

async/await 구문을 사용하는 동안 서비스 직원의 약속에 어려움을 겪고 있습니다.
다음 상황 : 푸시 알림을 받았으며 클릭 이벤트를 처리하려고합니다. thencatch과 함께 "이전"구문을 사용하면 클라이언트 목록에서 iteratore를 수행 할 수 있습니다. async/await으로 내가 선호하는 방식을 사용하면 아무 것도하지 않습니다. @Crice 및 @Keith에서비스 종사자 : 비동기가 waituntil과 결합하여 제대로 작동하지 않습니다.

self.addEventListener("notificationclick", event => { 

    // is working 
    event.waitUntil(self.clients.matchAll().then(clientList => { 
    console.log(clientList); 
    })); 

    // is not working 
    event.waitUntil(async() => { 
    const clientList = await self.clients.matchAll(); 
    console.log(clientList); 
    }); 
}); 
+0

'waitUntil'처럼 보이는 것이 대기열이며 기능이 아닙니다. 어쩌면 비동기 함수를 즉시 호출하면 작동 할 수 있습니다. 예 :'event.waitUntil ((async() => {...})())' – CRice

+0

@CRice가 정확합니다. 당신은 IIF 방식으로 할 수 있지만, 좀 더 쉽게 이해할 수있는 방법은 비동기식 물건을 모두 가지고있는'getClients'라는 함수를 생성 한 다음'event.waitUntil (getClients()); – Keith

+0

@CRice와 @Keith 두 분 모두 감사합니다. 너는 완전히 옳다. 위로 몇 가지를 섞은 ... 나는 그것이 "약속을 반환 할 것임을 알았 기 때문에"외부 "비동기 함수를 사용하려고했습니다. 하지만 실제로 방금 참조 (waitUntil (getClients)'vs'waitUntil (getClients())'를 대신 전달했습니다. – dkirchhof

답변

1

감사합니다,

waitUntil 대신 함수의 인수로 약속을해야합니다. 이것은 비동기/대기 스타일의 작동 예제입니다 :

self.addEventListener("notificationclick", event => 
{ 
    event.waitUntil(getClients()); 
}); 

async function getClients() 
{ 
    const clientList = await self.clients.matchAll(); 
    console.log(clientList); 
} 
+0

당신의 예제 (Q에서)와이 예제의 차이점은 무엇입니까? 두 가지 모두에 비동기 함수를 전달하는 것처럼 보입니다. 그래서 무엇이 약속이되고 다른 것이 아닌가?이 작동합니까? event.waitUntil ((async() => {/ * code * /}())); – REJH

+1

사실, 나는 질문에 나의 예에서 인생을 사용하지 않았다. 즉, 나는 괄호를 잊어 버렸다. 그래서 그것은 단지 함수이지만, 약속은 반환하지 않았다. 'let a = (async() => 대 'let b = async() => {return Promise.resolve()})();)}; 콘솔 .log (typeof b, b instanceof Promise); // function false' 제 대답은 약속을 반환하는 async 함수를 호출하는 것입니다. 전에 그냥'event.waitUntil' 함수에 param으로 함수를 전달하기 전에 (다시 괄호를 잊어 버렸습니다). – dkirchhof