簡體   English   中英

將異步/等待應用於功能

[英]applying async/await to functions

我正在遵循文檔,但沒有正確執行。 有人可以看一下我的代碼,看看我做錯了什么嗎?

function getCookies(){

    var cookies = {
        art_rfp : '',
        art_token: '',
        hire_rfp: '',
        hire_token: '',
        corp_rfp: '',
        corp_token: '',
    }

    chrome.cookies.getAll({"url":"https://url.com"}, function (cookies) {
        var string = ''
        for(var i=0; i<cookies.length; i++){
            var name = cookies[i].name
            // console.log(name)
            if (name == 'a-sso_rfp') {
                console.log('ART- '+cookies[i].name+': '+cookies[i].value)
                cookies.art_rfp = cookies[i].value
            }
            else if (name == 'b-sso_token') {
                console.log('ART- '+cookies[i].name+': '+cookies[i].value)
                cookies.art_token = cookies[i].value
            }
            var value = cookies[i].value
            string += name+"="+value+"; "
        }
    });

    chrome.cookies.getAll({"url":"https://url2.com"}, function (cookies) {
        var string = ''
        for(var i=0; i<cookies.length; i++){
            var name = cookies[i].name

            if (name == 'a-sso_rfp') {
                console.log('HIRE- '+cookies[i].name+': '+cookies[i].value)
                cookies.hire_rfp = cookies[i].value
            }
            else if (name == 'b-sso_token') {
                console.log('HIRE- '+cookies[i].name+': '+cookies[i].value)
                cookies.hire_token = cookies[i].value
            }
        }
    });

    chrome.cookies.getAll({"url":"https://url3.com"}, function (cookies) {
        var string = ''
        for(var i=0; i<cookies.length; i++){
            var name = cookies[i].name
            if (name == 'e-sso_rfp') {
                console.log('CORP- '+cookies[i].name+': '+cookies[i].value)
                cookies.corp_rfp = cookies[i].value
            }
            else if (name == 'f-sso_token') {
                console.log('CORP- '+cookies[i].name+': '+cookies[i].value)
                cookies.corp_token = cookies[i].value
            }

        }
    });
    return cookies
}

function sendCookies(cookies){
    console.log(cookies)
}

console.log('this started')

async function run(){
    let cookies = await getCookies()
    let resposne = await sendCookies(cookies)
}

run()

當我在sendCookies()打印cookies時,它是在瀏覽器獲取cookie數據之前進行打印的。 我正在嘗試讓它等到完成為止。

您的getCookies()函數不是異步的。 它會進行一些異步調用( chrome.cookies.getAll() ),但不等待結果,而是立即返回cookies對象。

您需要使通話分散,例如

const getAllCookiesPromisified = (url) => new Promise(resolve => { 
   chrome.cookies.getAll({url}, resolve);
});

const p1 = getAllCookiesPromisified("https://url.com");
const p2 = getAllCookiesPromisified("https://url2.com");

return Promise.all([p1, p2]);

當等待函數返回Promise時,async / await起作用。 您的方法getCookies()sendCookies()都不返回Promise。

這篇博客文章可能對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM