Javascript 对GetCookie应用承诺
我正试图承诺从浏览器中获取cookiesJavascript 对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;
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");
});
})