Hỏi về xử lý bất đồng bộ trong Chrome extension message

Mình có một đoạn ở background.js

//file background.js
chrome.extension.onMessage.addListener(async function(request, sender, sendResponse) 
{
    if(request.type == "hello") {
        await timeout();
        sendResponse("hi!");
    }
    return true;
});

function timeout(ms = 3000) {
    return new Promise((resolve) => {
        setTimeout(resolve, ms);
    })
}

và một đoạn trong file popup.js

// file popup.js
chrome.runtime.sendMessage({ type: "hello" }, function(response) {
    alert(response);
});

Bạn nào rành về mảng này cho mình hỏi mình làm sai gì mà tại sao response luôn trả về kết quả undefined? Mình đã tra google 2 3 hôm thử nhiều cái nhưng vẫn chưa giải quyết được, cám ơn ae :cry:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?