javascript - 将 async/await 应用于函数
问题描述
我一直在关注文档,但做得不对。有人可以看看我的代码,看看我做错了什么吗?
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()
当我打印cookies
时sendCookies()
,它会在浏览器获取 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]);
推荐阅读
- apache-spark - 可空 unicode 字符串的 Spark SQL 排名
- javascript - 这个 TypeScript Lambda 表达式中的括号是什么意思?
- javascript - 如何在一个 OData 模型中显示实体的名称
- 组件 SAPUI5
- python - 在 Windows 上使用 pyserial 将串行数据写入 Arduino
- linux-kernel - /init 后退出代码 = 0x00000004 的内核恐慌
- javascript - 如何在像laravel这样的vue js中使用组路由?
- javascript - 自动获取 Instagram 图片链接
- swift - 下载 Xcode 配置文件时出现问题
- android - 图像已下载但未显示在图库中
- sql - 如何在一个查询中使用同一张表 INNER JOIN 2 或 3 个不同的数据库