Javascript 第二个异步函数依赖于第一个异步函数
在async/await/Promissions上尝试和查看每一个可能的页面两天后,我仍然无法让它工作 第二个等待Javascript 第二个异步函数依赖于第一个异步函数,javascript,node.js,Javascript,Node.js,在async/await/Promissions上尝试和查看每一个可能的页面两天后,我仍然无法让它工作 第二个等待b取决于第一个a的结果。无论我做什么,b都将返回未定义。我已经通过日志记录验证了firstLink是否返回了正确的href。然而,代码通过b向右吹 我使用node.js,因为代码是从服务器上运行的。因为它没有运行浏览器,所以我使用JSDOM来模拟dom 谢谢 async function getData(url){ const a = await fetchReq(url)
b
取决于第一个a
的结果。无论我做什么,b
都将返回未定义。我已经通过日志记录验证了firstLink
是否返回了正确的href。然而,代码通过b
向右吹
我使用node.js,因为代码是从服务器上运行的。因为它没有运行浏览器,所以我使用JSDOM来模拟dom
谢谢
async function getData(url){
const a = await fetchReq(url)
var firstLink = a.window.document.getElementsByTagName('a')[0].href;
const b = await fetchReq(firstLink)
myStr = b.window.document.getElementsByTagName('a')[1].innerText;
return myStr
}
async function fetchReq(url){
const response = await fetch(url);
const text = await response.text();
const dom = new JSDOM(text);
return dom;
};
getData(url)
注意:我不确定调试这段代码的最佳方法。我能看到结果的唯一方法是将其记录到cmd。因此,将“b”记录到cmd提示符会返回“{}”,我认为这仍然是一个未解决的承诺。我想您需要删除
return
语句中fetchReq
函数的内部。发生此问题的原因是,它返回了承诺的已实现值,并且在JSDOM
的代码中有2个wait
关键字。如文件所述:
返回承诺的已实现值,如果不是承诺,则返回值本身
如下所示:
async function fetchReq(url){
const response = await fetch(url);
const text = await response.text();
const dom = new JSDOM(text);
return dom;
};
我希望这有帮助 好的,有两个问题
似乎是将const JSDOM移到main函数中,只返回它生成的文本,这样我就可以返回第二个fetch请求
对于nodeJS,似乎您需要的是文本内容,而不是内部文本
async function getData(url){
const a = await fetchReq(url)
const dom1 = new JSDOM(a);
var firstLink = dom1.window.document.getElementsByTagName('a')[0].href;
const b = await fetchReq(firstLink)
const dom2 = new JSDOM(b);
myStr = dom2.window.document.getElementsByTagName('a')[1].textContent;
return myStr
}
async function fetchReq(url){
const response = await fetch(url);
const text = await response.text();
return text;
};
getData(url)
这是新的JSDOM(文本)代码>是否真的返回承诺?如果不是简单地删除等待并返回返回新的JSDOM(文本)代码>。还需要等待响应。text()是unnecessary@ambianBeing我相信,在取消了那里的等待之后,它仍在发挥同样的作用。VS代码有下划线,表示它对这种类型的表达式没有影响。是的,好的!但是,为什么要等待非异步(并且不返回承诺)的东西呢。你能试试控制台的response.text()
is和newjsdom(text)
的返回值吗?我相信在删除wait之后,它仍然可以正常工作。VS代码在下面加了下划线,表示它对这种类型的表达式没有影响。JSDOM
究竟是什么类型的返回?这是一个承诺吗
?我在OP中添加了一条评论。我很难看到它返回什么,因为我只能通过cmd查看node.js中的日志。当我记录'b'时,返回了'{}'。我无法记录dom是什么。根据使用wait from'const b=wait fetchReq()'的性质,我相信它确实返回了一个承诺?@Citanaf我相信是这样的。