我正在使用需要访问Google Chrome浏览器cookie的本地Node.js应用程序。我发现chrome-cookies-secure
似乎可以完成此工作的库,但是我无法弄清楚下面的代码出了什么问题。
const chrome = require('chrome-cookies-secure');
const domains = [
"google.com"
];
const resolveCookies = async () => {
let result = [];
for(domain of domains) {
await chrome.getCookies(`https://${domain}/`, (err, cookies) => {
result.push(cookies);
// console.log(cookies); //? This is going to correctly print the results
})
}
return result;
}
const final = resolveCookies();
console.log(final); //! This is going to return a Promise { <pending> } object
我的想法是,我只想将所有域中的cookie存储在一个列表中,但是无论我无法解决Promise都是什么。我没有看到关于此模块的异步调用的任何示例,但是如果我不使用它,它将在脚本执行后返回一个空列表。
我的节点版本: v14.4.0
我究竟做错了什么?
它看起来像的实现getCookies
是不正确地等待异步进程。您可以在实现中看到,尽管getCookies
它本身是async
,但它在getDerivedKey
不等待的情况下进行了调用(并且该函数始终不起作用async
)。
建议不要使用依赖于此实现的方法,而是Util.promisify
通过回调来创建适当的Promise:
const util = require('util');
const chrome = require('chrome-cookies-secure');
const getCookies = util.promisify(chrome.getCookies);
// ...
const cookies = await getCookies(`https://${domain}/`);
手动将如下所示:
const getCookies = (url) => new Promise((resolve, reject) => {
chrome.getCookies(url, (err, cookies) => {
if (err) {
reject(err);
} else {
resolve(cookies);
}
});
});
有人已经尝试解决此问题,但是将近九个月没有将其合并。
请注意,一旦您具有要调用的工作功能,您还可以转换:
const resolveCookies = async () => {
let result = [];
for(domain of domains) {
await chrome.getCookies(`https://${domain}/`, (err, cookies) => {
result.push(cookies);
// console.log(cookies); //? This is going to correctly print the results
})
}
return result;
}
简单地:
const resolveCookies = () => Promise.all(domains.map((domain) => getCookies(`https://${domain}/`)));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句