javascript - 第二个异步函数取决于第一个
问题描述
经过两天的尝试和查看 async/await/promises 上的每个可能页面后,我仍然无法让它工作。
第二个 awaitb
取决于第一个的结果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 提示符会返回“{}”,我认为这仍然是一个未解决的承诺。
解决方案
我猜你需要删除语句中的函数await
内部。问题正在发生,因为它返回了一个已完成的值,并且您的代码中有 2 个关键字。正如文档所述:fetchReq
return
Promise
await
JSDOM
返回 Promise 的已实现值,如果不是 Promise,则返回值本身。
就像下面这样:
async function fetchReq(url){
const response = await fetch(url);
const text = await response.text();
const dom = new JSDOM(text);
return dom;
};
我希望这会有所帮助!
推荐阅读
- c# - .net Core 将 csproj 文件解析为对象
- postgresql - 在 postgres 中生成从 0001 到某些东西的系列
- jquery - JQuery numbered ids
- microsoft-graph-api - graph.windows 和 graph.Microsoft 有什么区别
- php - php 二维数组根据key的值进行排序分组
- node.js - 在同一个 Azure Web 应用中部署 Angular 6 应用和 Web API
- css - 我需要与 powerpoint 365 中相同的 CSS 反弹效果
- angularjs - AngularJS Spring Social Facebook CORS 问题
- nsjsonserialization - 我们可以用 Codable 代替 JSonSerialization 来序列化吗?与 jsonserializer 相比,codable 的优缺点是什么
- postgresql - 从 JDBC Client 远程查询时,有时 postgres 不返回记录