首页 > 解决方案 > 第二个异步函数取决于第一个

问题描述

经过两天的尝试和查看 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 提示符会返回“{}”,我认为这仍然是一个未解决的承诺。

标签: javascriptnode.js

解决方案


我猜你需要删除语句中的函数await内部。问题正在发生,因为它返回了一个已完成的值,并且您的代码中有 2 个关键字。正如文档所述:fetchReqreturnPromiseawaitJSDOM

返回 Promise 的已实现值,如果不是 Promise,则返回值本身。

就像下面这样:

async function fetchReq(url){
    const response = await fetch(url);
    const text = await response.text();
    const dom = new JSDOM(text);
    return dom;
};

我希望这会有所帮助!


推荐阅读