gpt4 book ai didi

javascript - 获取回调值并在另一个异步函数中使用它

转载 作者:行者123 更新时间:2023-11-30 13:55:40 25 4
gpt4 key购买 nike

我有一个连接到 MongoDb 的 Node.js 应用程序。我正在使用 findOne() 从我的 mongodb 集合中检索某个 json,因此该值是在回调中获取的。我的应用程序还具有使用 puppeteer 的浏览器自动化任务。为了填写某个输入字段,我尝试使用从 mongodb 集合中检索到的 json。但由于异步性质,我无法在函数外部使用回调值。我需要使用回调值作为 puppeteer 操作者的输入发送。

我尝试使用另一个函数从 findOne() 回调中获取值,但仍然无法将其用于 puppeteer 异步函数。

以下代码从 mongodb 中获取值:

var g;


db.collection("users").findOne({}, function(err, result) {
if (err) throw err;
storedata(result);

});

function storedata (x){
g = x;
//console.log(g);
}

puppeteer 代码:

(async () => {
const browser = await puppeteer.launch({
headless: false
})
const page = await browser.newPage();

await page.goto('http://0.0.0.0:4200/')

await page.$eval('[placeholder="BPMN xml"]', el => {
return el.value = g
})
})()

我总是得到错误g is not defined。当然,我知道 g 的范围在函数内,但即使我试图将 puppeteer 代码放在函数 storedata() 中,我也会收到 g undefined 错误。请帮助我更好地理解回调值。

最佳答案

问题是您将 g 传递给浏览器环境。该变量仅存在于您的 Node.js 环境中,但您必须明确地将其传递给浏览器环境才能使用它。

引自文档(page.$eval 的第三个参数):

...args <...Serializable|JSHandle> Arguments to pass to pageFunction

代码示例:

await page.$eval('[placeholder="BPMN xml"]', (el, g) => {
return el.value = g
}, g);

您将 g 作为第三个参数传递,然后它将成为页面内函数中的第二个参数。

关于javascript - 获取回调值并在另一个异步函数中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com