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

使用带有一定延迟的async await模式重新调整promise

田普松
2023-03-14

我试图从一个调用rest API的方法返回一些测试数据。为了模拟rest api调用,我添加了一些延迟来使用async-await模式返回一个promise,但它并不像预期的那样工作。

我对JavaScript中的async-await模式的理解是,从异步函数返回的任何值都将作为承诺返回,因此该函数应该将值100作为承诺返回,因此使用的最后一条语句应该显示100,但实际上并非如此。

下面的代码段有什么问题,它导致最后一行代码中的警报显示undefined而不是100?

null

async function f() {

  function delayedResponse() {
    setTimeout(function() { return 100}, 5000);
  }
  return await delayedResponse();

}

f().then(alert); // 100

null


共有1个答案

王才
2023-03-14

delayedresponse中没有返回任何内容,因此导致undefined

相反,为了实现您所期望的--您可以显式地创建一个承诺,并使用超时解析一个值;

null

async function f() {
  return new Promise(resolve => {
    setTimeout(function() { resolve(100)}, 5000);
  }); 
}

f().then(alert); // 100
 类似资料:
  • 我有一种情况,我的ajax调用必须以特定的顺序执行。我在其他情况下使用了jQueryDeferred对象,但似乎找不到一种方法来使其正常运行。 我有一个函数,在它的生命周期中执行许多请求。一些请求将在其他请求的成功回调期间执行。 我的问题:当调用时,是否有方法将所有嵌套的延迟对象返回到原始的

  • 问题内容: 重新启动活动时,上一个活动的延迟太多,无法调用。 我正在使用此代码重新启动我的活动 PlayerActivity.java 让我们分别调用 PreviousPlayerActivity 和 NewPlayerActivity ,之前的活动以及新的活动。(请记住,它们是相同的PlayerActivity)。 序列 重新启动应用程序时,将在activity-lifecycle中遵循此流程。

  • 问题内容: 如果这是完全相同的内容,请纠正我,我知道这个话题经常被讨论,但是找不到确切的答案。 问题: 在MVC Web应用程序中处理Hibernate对象的最佳实用解决方案是什么? 细节: 我正在使用Hibernate,并希望在可能的情况下利用延迟加载。 我正在使用MVC风格的webapp。 我讨厌获得延迟加载初始化异常。 我讨厌不得不在事务之间重新连接Hibernate对象。 选项: 渴望装载

  • 延迟调用一个函数,直到当前调用堆栈已经清除。 使用 setTimeout() ,超时时间为1ms,将新事件添加到浏览器事件队列,并允许渲染引擎完成其工作。使用展开 (...) 运算符为函数提供任意数量的参数。 const defer = (fn, ...args) => setTimeout(fn, 1, ...args); // Example A: defer(console.log, 'a

  • Go 语言中没有提供其它面向对象语言的析构函数,但是 Go 语言提供了 defer 语句用于实现其它面向对象语言析构函数的功能 defer 语句常用于 释放资源、解除锁定 以及 错误处理 等 例如C语言中我们申请了一块内存空间,那么不使用时我们就必须释放这块存储空间 例如C语言中我们打开了一个文件,那么我们不使用时就要关闭这个文件 例如C语言中我们打开了一个数据库, 那么我们不使用时就要关闭这个数

  • 本文向大家介绍一定延迟后如何调用jQuery函数?,包括了一定延迟后如何调用jQuery函数?的使用技巧和注意事项,需要的朋友参考一下 要在一定延迟后调用jQuery函数,请使用方法。在这里,几秒钟后调用jQuery函数。 您可以尝试运行以下代码,以了解如何使用jQuery中的方法在延迟后调用jQuery函数- 示例