当前位置: 首页 > 面试题库 >

我可以在nodejs(ES7)中解雇诺言吗?

陆正奇
2023-03-14
问题内容

我想使用babel运行以下代码:

redisClientAsync.delAsync('key');
return await someOtherAsyncFunction();

在异步函数内部,无需 等待 第一行。这个可以吗?

我还能如何运行我不在乎的东西?

我是否可以在没有回调的情况下触发未承诺的函数del(’key’,null)?


问题答案:

是的,您可以执行此操作,它将并行运行两个异步函数。您刚刚创建了一个承诺并将其丢弃。

但是,这意味着当诺言被拒绝时,您将不会注意到。您将最终得到一个unhandledRejection

这个可以吗?我该怎么办我不在乎的事情?

可能不是很好。如果您真的不在乎,那么您并不是一开始就运行它。因此,您应该清楚明确地表示自己关心的是什么(不关心什么):

  • 你想等吗?(副作用)
  • 您需要结果吗?
  • 您想捕获异常吗?

如果只想等待而不关心结果值,则可以轻松丢弃结果:

void (await someAsyncFunction()); // or omit the void keyword,
                                  // doesn't make a difference in an expression statement

如果您不在乎异常,则可以使用以下命令忽略它们

… someAsyncFunction().catch(function ignore() {}) …

您可以扔掉它,等待它,或用它做任何事情。

如果需要结果,则必须等待。如果您关心异常,但又不想等待,可以与以下功能并行执行:

var [_, res] = await Promise.all([
    someAsyncFunction(), // result is ignored, exceptions aren't
    someOtherAsyncFunction()
]);
return res;


 类似资料:
  • 问题内容: 我正在将pytest用于我的selenium测试,并想知道在一个测试中是否可能有多个断言? 我调用了一个比较多个值的函数,并且我希望测试报告所有不匹配的值。我遇到的问题是,使用“ assert”或“ pytest.fail”会在发现不匹配的值时立即停止测试。 有没有办法让测试继续运行并报告所有不匹配的值? 问题答案: 正如Jon Clements所评论的那样,您可以填充错误消息列表,然

  • 问题内容: 我正在尝试编写一个返回诺言的函数。但是有时候,所请求的信息会立即可用。我想将其包装在一个承诺中,这样消费者就不必做出决定了。 并像这样使用它: 问题在于,对于预解析的Promise不会执行回调。这是合法的事情吗?有没有更好的方法来处理这种情况? 问题答案: 简短的答案:是的,您可以 在返回AngularJS承诺之前将其解析,并且其行为将与您期望的一样。 来自JB Nizet的Plunk

  • 问题内容: 因此,我遇到了多个未知长度的promise链的情况。我希望在处理所有链条后执行一些操作。那有可能吗?这是一个例子: 在此示例中,我设置了一个承诺1,,2和3,这些承诺会在某个随机时间得到解决。然后,我将诺言添加到第一和第三的结尾。我想在所有链条都解决后解决。这是运行此代码时的输出: 有没有办法等待连锁解决? 问题答案: 当所有链条都解决后,我希望所有人解决。 当然,然后将每个链的承诺传

  • 在Scala文档中,有一个例子说明了如何通过使用promise来选择更快成功的未来。 http://docs . Scala-lang . org/overviews/core/futures . html # promises 这个函数返回先成功的未来,如果其中任何一个失败,它永远不会完成。 是否有可能以这样一种方式修改它,即即使其他未来失败,如果第二个成功,则返回第二个,如果两个都成功,则选择

  • 问题内容: 我使用ES6 Promises来管理我的所有网络数据检索,并且在某些情况下需要强制取消它们。 基本上,这种情况是这样的:我在UI上进行了预先输入搜索,在该UI中,将请求委派给后端必须基于部分输入执行搜索。尽管此网络请求(#1)可能需要一点时间,但用户继续输入,最终会触发另一个后端调用(#2) 这里#2自然优先于#1,因此我想取消Promise包装请求#1。我已经在数据层中缓存了所有Pr

  • 问题内容: 我增加了一个,这似乎为。在关闭之前,我想验证的输入。基于验证,我想关闭还是不关闭。但是我不知道如何防止按下按钮时的关闭动作。有没有人解决了这个问题或从哪里开始的任何想法?我去了谷歌,但没有运气:/谢谢! 问题答案: 您是正确的:如果用户可以点击警报中的按钮,则警报将被关闭。因此,您要防止用户点击按钮!只需禁用UIAlertAction按钮即可。如果禁用了警报操作,则用户无法点击它以将其