gpt4 book ai didi

node.js - 如何从一个简单的 jsdom 函数返回一个值?

转载 作者:搜寻专家 更新时间:2023-10-31 22:42:39 25 4
gpt4 key购买 nike

我将 jsdom 与 jquery 一起使用,它工作得很好。但是,我试图将我的代码模块化一点,所以我不会重复自己,所以我用一些 jsdom 代码制作了一个基本函数,它接受一些 html (DOM),用 jquery 调整它,然后把它吐出来.但是,我无法返回我的结果,因此无法将其分配给调用 var。我可能没有回到正确的地方,但如果是的话,我只是看不到明显的东西。需要一点帮助。

代码如下:

function tweakIt(html_in){
var jsdom = require('jsdom');
jsdom.env({
html: html_in,
scripts: [
'../public/javascripts/jquery-1.7.1.min.js',
],
done: function(errors, window) {
var $ = window.$;
// do some jquery magic and manipulate the dom
$('body').append('<div>foo</div>');

console.log('Freshly Manipulated HTML: '+ $('body').html()); // it logs perfectly
return $('body').html(); // this isn't returned to where I called tweakIt() from, why not?
}
});
}

var oldhtml = '<html><body><div>some text</div></body></html>';
var newhtml = tweakIt(oldhtml); // never gets set because nothing gets returned, why?

编辑:

这确实是一个异步问题,所以这里是应该如何使用回调而不是返回来完成的:

function tweakIt(html_in, callback){
var jsdom = require('jsdom');
jsdom.env({
html: html_in,
scripts: [
'../public/javascripts/jquery-1.7.1.min.js',
],
done: function(errors, window) {
var $ = window.$;
// do some jquery magic and manipulate the dom
$('body').append('<div>foo</div>');

console.log('Freshly Manipulated HTML: '+ $('body').html()); // it logs perfectly
callback($('body').html()); // instead of a return, pass the results to the callback
}
});
}

var oldhtml = '<html><body><div>some text</div></body></html>';
var newhtml = tweakIt(oldhtml, function(newstuff){
console.log(newstuff); // woohoo! it works!
});

最佳答案

我不认为你可以使用返回值来做到这一点,因为 done: 是一个异步函数。尝试向您的 tweakIt 添加回调并通过将其作为参数发送来获取新的 html,例如

tweakIt(oldHtml, function(newHtml) {/*在这里使用结果*/})

关于node.js - 如何从一个简单的 jsdom 函数返回一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9419242/

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