当前位置: 首页 > 知识库问答 >
问题:

节点。js等待捕获不返回

斜昊空
2023-03-14

我忙于处理一些以意想不到的方式(对我)响应的代码。它涉及处理Node.jspromise异常

我修改了下面的函数,这样它所做的就是失败

function asynFunc() {
    return new Promise(function(res, rej) {

        rej("GENERIC ERROR");

    });
}

当我试图调用它并处理这个错误时,问题就出现了。如果我做了下面的事情,它会像我期望的那样工作,函数会失败,并执行返回的捕获,停止最后一个控制台日志的执行

async function appStart() {

    try {
        await asyncFunc();
    } catch(log) {
        console.log(log);
        return;
    }

    console.log("YOU SHOULD NOT SEE THIS");

}

appStart();

尽管如此,如果我按照如下方式编写函数,它似乎不会返回,它仍然会执行最后一个控制台日志,而不考虑等待时间

async function appStart() {

    await asyncFunc().catch(function(log) {
        console.log(log);
        return;
    });

    console.log("YOU SHOULD NOT SEE THIS");

}

如果这是我认为它正在做的,那么返回是从catch内部的函数返回的,而不是appStart函数本身,或者我完全错了,在这种情况下,我不知道它为什么不返回。

有没有一种方法可以使用第二个捕获方法,并且仍然让它从调用函数返回?

共有2个答案

孔鸿哲
2023-03-14

你说得对。它只在catch回调中返回,而不是在外部异步函数中返回。这就是为什么它退出catch回调并解析,然后记录“您不应该看到这个”。一般来说,如果将promise然后捕获链接与异步/等待尝试/捕获混合在一起,这是非常不可读的。选择一个并坚持下去,因为混合它们可能导致无法无缝地捕获和处理错误。

邵沛
2023-03-14

在第二个例子中,您不是从catch中的外部函数返回,而是从catch回调返回:

await asyncFunc().catch(function(log) {
    console.log(log);//  ^
    return;          //  | returns from that function
});

这样做的效果是捕捉错误,继续前进并返回一个新的promise,解析为未定义。无法从回调内部控制外部函数的返回。您需要从外部函数测试异步操作的结果,这样您就可以使用try/catch或在promise解析后显式测试结果。

 类似资料:
  • 我在运行节点版本14.15.3

  • 问题内容: 我对节点还很陌生,我刚刚了解了javascript中提供的async和await函数。我正在尝试在下面随附的代码段中实现此方法。以我的理解,数据库响应应该首先打印到控制台,然后“完成”,但是我无法使其正常工作。任何帮助将不胜感激。 也请尝试说明您所做的修复操作,因为我想了解我做错了什么。 问题答案: 您的函数中没有语句。 通常,这将导致函数返回,但是由于您声明了它,因此它导致其返回 立

  • 我有节点14.13.0,并且即使使用,top-level wait也不能工作。 我做错了什么?

  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 我用webpack建立了一个浏览器umd库。 我正在侦听输入文件的onchange事件。当有人提交图像/文件时,它会将其转换为base64。我试图让它尽可能看起来不那么明显,所以我使用了promises和wait/asynchttps://blog.shovonhasan.com/using-promises-with-filereader/. 但是,有一个问题-当我调用convertToBase

  • 如何让代码等待页面在Nodejs中完全加载?我使用SeleniumWebDriver版本4.0。0