Javascript 对GetCookie应用承诺

Javascript 对GetCookie应用承诺,javascript,Javascript,我正试图承诺从浏览器中获取cookies browserCookies = { art_rfp : '', art_token : '' }; var promise = new Promise((resolve, reject) => { chrome.cookies.getAll({"url":"https://url.com"}, function (cookies) { for(var i=0; i<cookies.length;

我正试图承诺从浏览器中获取cookies

browserCookies = {
    art_rfp : '',
    art_token : ''
};


var promise = new Promise((resolve, reject) => {
    chrome.cookies.getAll({"url":"https://url.com"}, function (cookies) {
        for(var i=0; i<cookies.length; i++){
            var name = cookies[i].name
            // console.log(name)
            if (name == 'sso_rfp') {
                console.log(name) // line 13
                browserCookies.art_rfp = cookies[i].value
                resolve('cookies found')
            }
            else if (name == 'sso_token') {
                console.log(name) // line 18
                browserCookies.art_token = cookies[i].value
            }
            else {
                reject('no cookies found')
            }
        }
    });

})

promise.then((message) => {
    console.log(message)
}).catch((message) =>{
    console.log(message)
})

为什么不能解决?承诺只能被拒绝/解决一次

因此,在您的循环中可能发生的情况是,第一个cookie的名称既不是
sso\u rfp
也不是
sso\u token
,因此它将调用
reject('no cookies found')
,因此即使稍后找到更多cookie,它们也无法得到解决,因为已经调用了拒绝

因此,您要做的是使用简单的布尔值跟踪找到或未找到cookie的位置,然后在最后解析/拒绝

例如

var承诺=新承诺((解决、拒绝)=>{
chrome.cookies.getAll({“url”:”https://url.com“},函数(cookies){
var=false;

对于(var i=0;iPromises不会神奇地等待事情完成-如果不解决停止问题,就无法知道如何完成。您可以从
getCookies()
中返回承诺,并在
getAll()中解决它
callback.ok,这是我一直在尝试的,但无法让它工作。我已经更新了代码并输入了正在打印的内容。知道为什么无法解决吗?您的更新在技术意义上正确使用了承诺(不确定业务逻辑是否明智),但您有一个阴影变量。您试图为其赋值的对象称为
cookies
,但回调参数也被称为
cookies
-您认为您是在为外部对象赋值,但实际上是在处理回调参数。啊……没关系。让我试试更新后的,仍然不是解析温文
background.js:13 sso_rfp
background.js:18 amzn_sso_token
background.js:32 no cookies found
var promise = new Promise((resolve, reject) => {
    chrome.cookies.getAll({"url":"https://url.com"}, function (cookies) {
        var found = false;
        for(var i=0; i<cookies.length; i++){
            var name = cookies[i].name
            // console.log(name)
            if (name == 'sso_rfp') {
                console.log(name) // line 13
                browserCookies.art_rfp = cookies[i].value
                found = true;
            }
            else if (name == 'sso_token') {
                console.log(name) // line 18
                browserCookies.art_token = cookies[i].value;
                found = true;
            }
        }
        if (found) resolve("Cookies Found");
        else reject("no cookies found");
    });
})