使用电子在多个回调函数中返回值时出错
Error returning values in multiple callback functions with electron
我目前正在尝试从 electron-json-存储数据库中获取一个值并 return 它。
function getWithExpiry(key) {
var grabbed = "";
storage.has(key, function (error, hasKey){
if (error) throw error;
if (hasKey){
storage.get(key, function (error, data){
if (error) throw error
const item = JSON.parse(data)
const now = new Date()
if (now.getTime() > item.expiry) {
storage.remove(key, function (error) {
if (error) throw error
grabbed = null
})
}else{
console.log(item.value)
grabbed = item.value
}
})
}
})
console.log(grabbed)
return grabbed;
}
我这样称呼它:
setTimeout(async () => {
var tokenpass = getWithExpiry('captcha')
console.log(tokenpass)
await page.evaluate((tokenpass) => {document.getElementById("g-recaptcha-response").innerText = `${tokenpass}`}, tokenpass)
await page.click('input.button').then(console.log('Clicked'));
console.logs return 的调用顺序不同。首先是 returns "" from console.log(grabbed)
in getWithExpiry(key)
,然后是 "" from console.log(tokenpass)
,然后是 console.log('Clicked')
,然后是 console.log(item.value)
的期望值.我认为这些 console.logs
的顺序可能是 getWithExpiry
没有 return item.value
的原因。
木偶师
放await page.waitFor(1000);
因为元素需要一些时间来更新,当你改变 innterText
async function getWithExpiry(key) {
return new Promise((res, rej) => {
storage.has(key, function (error, hasKey) {
if (error) rej(error);
if (hasKey) {
storage.get(key, function (error, data) {
if (error) rej(error);
const item = JSON.parse(data);
const now = new Date();
if (now.getTime() > item.expiry) {
storage.remove(key, function (error) {
if (error) rej(error);
res(null);
});
} else {
console.log(item.value);
res(item.value);
}
});
}
});
});
}
setTimeout(async () => {
var tokenpass = await getWithExpiry("captcha");
console.log(tokenpass);
await page.evaluate((tokenpass) => {
document.getElementById("g-recaptcha-response").innerText = `${tokenpass}`;
}, tokenpass);
await page.waitFor(1000);
await page.click("input.button").then(console.log("Clicked"));
});
我目前正在尝试从 electron-json-存储数据库中获取一个值并 return 它。
function getWithExpiry(key) {
var grabbed = "";
storage.has(key, function (error, hasKey){
if (error) throw error;
if (hasKey){
storage.get(key, function (error, data){
if (error) throw error
const item = JSON.parse(data)
const now = new Date()
if (now.getTime() > item.expiry) {
storage.remove(key, function (error) {
if (error) throw error
grabbed = null
})
}else{
console.log(item.value)
grabbed = item.value
}
})
}
})
console.log(grabbed)
return grabbed;
}
我这样称呼它:
setTimeout(async () => {
var tokenpass = getWithExpiry('captcha')
console.log(tokenpass)
await page.evaluate((tokenpass) => {document.getElementById("g-recaptcha-response").innerText = `${tokenpass}`}, tokenpass)
await page.click('input.button').then(console.log('Clicked'));
console.logs return 的调用顺序不同。首先是 returns "" from console.log(grabbed)
in getWithExpiry(key)
,然后是 "" from console.log(tokenpass)
,然后是 console.log('Clicked')
,然后是 console.log(item.value)
的期望值.我认为这些 console.logs
的顺序可能是 getWithExpiry
没有 return item.value
的原因。
木偶师
放await page.waitFor(1000);
因为元素需要一些时间来更新,当你改变 innterText
async function getWithExpiry(key) {
return new Promise((res, rej) => {
storage.has(key, function (error, hasKey) {
if (error) rej(error);
if (hasKey) {
storage.get(key, function (error, data) {
if (error) rej(error);
const item = JSON.parse(data);
const now = new Date();
if (now.getTime() > item.expiry) {
storage.remove(key, function (error) {
if (error) rej(error);
res(null);
});
} else {
console.log(item.value);
res(item.value);
}
});
}
});
});
}
setTimeout(async () => {
var tokenpass = await getWithExpiry("captcha");
console.log(tokenpass);
await page.evaluate((tokenpass) => {
document.getElementById("g-recaptcha-response").innerText = `${tokenpass}`;
}, tokenpass);
await page.waitFor(1000);
await page.click("input.button").then(console.log("Clicked"));
});