JS:如何在回调中使用生成器和yield

2024-02-19

我使用 JS 生成器在回调中生成一个值setTimeout:

function* sleep() {
  // Using yield here is OK
  // yield 5; 
  setTimeout(function() {
    // Using yield here will throw error
    yield 5;
  }, 5000);
}

// sync
const sleepTime = sleep().next()

为什么我无法在生成器的回调中产生值?


function* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*声明是同步的。你可以产生一个新的Promise物体、链.then() to .next().value检索已解决的Promise value

function* sleep() {
  yield new Promise(resolve => {
    setTimeout(() => {
      resolve(5);
    }, 5000);
  })
}

// sync
const sleepTime = sleep().next().value
  .then(n => console.log(n))
  .catch(e => console.error(e));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS:如何在回调中使用生成器和yield 的相关文章

随机推荐

  • 使用从文件读取的字符串在 Typescript 中进行字符串插值

    我读过关于模板字符串 http basarat gitbooks io typescript content docs template strings html在打字稿中 我想知道当我从这样的文件中读取字符串时是否可以使用它们 let x
  • 什么时候应该对

    假设我有这样的 HTML 结构 div class a div class floated left div div class floated left div div 我注意到如果我不设置overflow hidden to a 那么
  • Mono.Cecil:从其他程序集中调用基类的方法

    如何按名称获取对基类方法的 MethodReference 我试过了 type BaseType Resolve Methods 如果我将包含基类的 dll 添加到 assemblyresolver 它将返回方法 但是如果我使用添加呼叫 M
  • 在具有多个接口的服务器上接收多播(linux)

    要在我的非默认 NIC dvb 上接收多播 我执行以下操作 打开套接字 AF INET SOCK DGRAM 在 DVB 接口上使用 IP ADD MEMBERSHIP 加入多播地址 绑定多播地址 请注意 一个常见的错误是绑定 0 0 0
  • Winforms 日志框架

    我正在编写一个 WinForms 应用程序 我需要将信息记录到文件中 通常我使用log4net http logging apache org log4net 用于记录 但由于限制 我无法添加引用 我无法添加外部对我的项目的引用 因为我必须
  • 如何在 IIS 7.0 中允许混合模式身份验证

    如何使用在 IIS 7 0 上运行的表单身份验证对 Windows 用户进行后门身份验证进入网站 创建一个单独的页面来处理 Windows 登录 该页面将对用户进行身份验证 然后为其设置表单 cookie 然后 将该页面添加到 web co
  • 色调旋转滤镜背后的确切数学原理是什么

    理论上对于每一种可能改变颜色的CSS过滤功能 https developer mozilla org en US docs Web CSS filters like grayscale invert opacity saturate sep
  • Django + uWSGI + nginx url映射

    我想在 NGINX 后面运行带有 uWSGI 的 Django 我将使用 Django 作为 API 服务 该服务应位于此链接上 项目 测试 api Django项目本身是空白的 1 9 6 只是创建了一个应用程序 迁移并创建了一个超级用户
  • 在 OS X 上使用 Objective-C 或 C++ 获取有效全屏分辨率的方法?

    我正在制作一款游戏 我想获取启动器的有效全屏分辨率列表 我找不到任何方法可以在 Mac OS X 上执行此操作 就像在系统偏好设置 Displays pane 是否可以 如果您的意思是获取显示屏分辨率 这可能就是您所追求的 NSScreen
  • 为 .NET 4 和 .NET 4.5 构建 - 引用的 NuGet 包怎么样?

    我有一个构建项目的脚本 输出 NET 4 0 程序集 该项目包括来自 NuGet 的 NLog 所以项目文件中的引用如下所示
  • 为网站构建CMS

    我有我的主站点kansasoutlawwrestling com它将使用 Codeigniter 然后我还为自己创建一个 CMS 它是一个单独的实体 位于kansasoutlawwrestling com kowmanager 我的 CMS
  • 运行 SimpleHTTPServer 时设置当前目录

    有什么方法可以设置要启动 SimpleHTTPServer 或 BaseHTTPServer 的目录吗 如果您正在使用SimpleHTTPServer直接从命令行 您可以简单地使用 shell 功能 pushd path you want
  • NumPy 沿不相交索引求和

    我有一个应用程序 需要对 3D NumPy 数组中的任意索引组进行求和 内置 NumPy 数组求和例程将沿 ndarray 维度之一的所有索引相加 相反 我需要沿着数组中的一个维度总结索引范围并返回一个新数组 例如 假设我有一个形状为 nd
  • 为 64 位项目调用 C# 中的 Javascript 函数

    我试图从 C 代码内部调用 Javascript 函数 eval 以利用运算符解析器的字符串 我使用了以下代码 https stackoverflow com a 12431435 712700 https stackoverflow co
  • 是否有与 TestNG 连接的 log4j 附加程序?

    我使用 log4j 并希望通常在我的日志记录工具中结束的日志消息出现在我的单元测试期间 TestNG 创建的测试报告中 我认为这意味着 log4jAppender输出到 TestNGListener以及我的 Maven 项目的 src te
  • 删除 URL 查询字符串中的加号 (+)

    我正在尝试让以下 URL 中的字符串显示在我的网页上 http example com ks4day 星期五 九月 13日 http example com ks4day Friday September 13th EDIT URL 中的日
  • iFrame 中的 Firebug 和 jQuery 选择器

    我正在开发一个 Web 应用程序 并使用 jQuery 插件 Colorbox 弹出一个窗口 其中显示用于编辑父窗口元素的表单 我正在使用 Firebug 来调试我的 Javascript 和 jQuery 并且我注意到我无法使用 jQue
  • Azure 队列创建最佳实践和规模

    我正在研究 Windows Azure 上的大规模 Web 性能应用程序的架构 目前是理论上的 并想请教一下您有关 Windows Azure 队列 不是 SB 以及如何最好地扩展 创建它们的知识 我基本上关注的是 MVC 前端 Web 角
  • 嵌套列表理解

    我尝试在内部列表理解中使用外部列表理解的值 x for x in range y for y in range 3 但不幸的是 这引发了NameError因为这个名字y未知 尽管外部列表理解指定了它 这是 Python 的限制 尝试过 2
  • JS:如何在回调中使用生成器和yield

    我使用 JS 生成器在回调中生成一个值setTimeout function sleep Using yield here is OK yield 5 setTimeout function Using yield here will th