如何从函数中多次产生值?

2023-11-29

所以我正在做的是,我有两个文件,一个包含一个将生成令牌的脚本,第二个文件处理该令牌。

问题是,记录令牌的第二个脚本只会记录收到的第一个令牌。

这就是我处理令牌的方式:

const first_file = require("./first_file.js");
first_file.first_file().then((res) => {
    console.log(res);
});

显然这是行不通的,因为它没有用新的值进行更新。

first_file = async () => {
    return new Promise(async (resolve, reject) => {
        //Generating the token
        (async () => {
            while (true) {
                console.log("Resolving...");
                resolve(token);
                await sleep(5000);
                resolved_token = token;
            }
        })();
    });
};

module.exports = { first_file };

我在这里做的是,我尝试做一个while..loop这样我就可以继续解析令牌。但事实并非如此,有没有办法可以直接导出变量,这样任务会更容易?


如果我正确理解你的问题,你想多次解决承诺,这与模块无关......

但是你对 JavaScript 中的 Promise 的理解有些错误......
你不能两次兑现承诺。

发电机

但是你可以从函数中生成新的值,这种类型的函数也称为发电机,函数可以重新进入其上下文(类似于async/await)并使用产生结果yield关键词。

通常使用发电机for..of环形。它有next()从生成器生成下一个值的方法...

让我们看一个例子:

const delay = ms => new Promise(res => setTimeout(res.bind(null, ms), ms));

async function* generator() {
    yield 'yield result from generator!'
    for (let ms = 100; ms <= 300; ms += 100) {
        yield 'delay: ' + await delay(ms) + ' ms';
    }
    yield delay(1000).then(() => 'you can also yield promise!');
}

async function main() {
    const gen = generator();
    console.log('1st', (await gen.next()).value);
    for await (const ms of gen) {
        console.log(ms)
    }
}

main()

注意*after 函数,这样我们就知道这个函数是一个生成器,其中async关键字这是异步生成器.

生成器非常有用。比如:按需生成值,像管道一样传递数据!,可以从函数返回无尽的值等......

Callback

这种老式方法在节点中大量使用,您可以在其中传递回调函数作为参数。

Example:

const delay = ms => new Promise(res => setTimeout(res.bind(null, ms), ms));

async function callback(fn) {
    fn('yield result from callback!');
    for (let ms = 100; ms <= 300; ms += 100) {
        fn('delay: ' + await delay(ms) + ' ms');
    }
    await delay(1000);
    fn('yield asynchronously!');
}

callback(value => console.log(value));

这种方法会产生各种疯狂的问题,例如:创建的函数范围、控制流灾难、没有break关键字等... 我不推荐这种方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从函数中多次产生值? 的相关文章

  • 跨域iframe自动调整大小

    我正在使用 iframe 和 javascript 制作一个 Web 小部件 我想让我的 iframe 能够根据其内容 从其他域加载 调整大小 我做了一些搜索 包括在 Stack Overflow 上 我找到了几个主题 但我找不到关于这个问
  • 如何用js获取一个月的4个星期一?

    我正在构建一个图表 其中 x 轴应该是一个月的四个星期 我只想显示该月的四个星期一 我已经有了currentMonth和currentYear变量 而且我知道如何获取该月的第一天 我所需要的只是将一个月的四个星期一放入数组中 所有这些都在同
  • 在 Javascript 中,有什么方法可以知道从哪个主机脚本加载?

    在javascript中 作为从某个主机加载的脚本 有什么方法可以知道我是从哪个服务器 主机加载的 我需要向该主机发出额外的 ajax 请求 并且更愿意动态地找出主机 因此 如果您在页面上包含 javascript 文件 当该 javasc
  • 当名称是数组时如何使用 Javascript 修改 HTML Select

    我有两个同名的 html select 对象 它们是具有不同索引的数组 我想做的是 如果从类别 0 选择元素中选择 关闭 我想禁用类别 1 元素 我一直在尝试使用 document getElementsByName 但无法弄清楚如何专门针
  • jQuery - 将所有展开的文本包装在 p 标签中

    我遇到以下情况 以下代码被写入我的页面 div Some text here which is not wrapped in tags p Some more text which is fine p p Blah blah another
  • javascript中文本区域限制每行的字符数

    我试图用 javascript 限制文本区域中每行的字符数 我在这里看到了一些例子 但并不完全符合我的要求 我写了一些东西 只有当你每次添加超过限制时才可以 换句话说 我每行有 10 个字符的限制 如果你总是输入至少 10 个字符就可以正常
  • Sequelize 4.3.2 n:m(多对多)关联:未处理的拒绝 SequelizeEagerLoadingError

    我有 3 个模型 用户 项目 UserProject module exports function sequelize DataTypes var User sequelize define User title DataTypes ST
  • 设置股票数据 Highcharts xAxis 的格式

    我已经浏览了需要为 xAxis 属性设置的 Highcharts 选项来格式化时间标签 但没有运气了解这对于这种情况到底是如何工作的 我在白天 盘中 检索了股票的动态数据 我需要显示这些数据 因为检索的数据每天从 9 30 开始到 17 0
  • 动态地将 .on() 方法与事件映射绑定

    我使用此语法来确保事件绑定动态添加li元素 ul list on click li function do something 我尝试使用这样的事件映射来存档相同的内容 ul list hammer css hacks false on s
  • Material.Angular.io mat-autocomplete [displayWith] 函数更新范围变量

    我遇到了一个问题 我可以在实例化 mat autocomplete 的组件控制器中访问本地声明的变量 我面临的问题是局部变量被困在这个范围内 我无法更新它们 有关更新 mat autocomplete 范围变量的任何想法或想法 最终我要做的
  • 两个日期之间间隔 15 分钟 javascript

    问题 我需要将两个日期 时间戳之间的所有 15 分钟时隙 日期格式 2016 08 10 16 00 00 创建为 HH mm 格式的数组 其中分钟限制为 00 15 30 45 示例 中午 12 30 到下午 2 30 将 gt 12 3
  • 是否可以让 webpacks System.import 使用 ajax (用于进度事件)?

    所以我刚刚更新到 webpack 2 并进行了第一个工作设置 其中 webpack 通过查看 System import 调用自动创建块 相当甜蜜 但是 我使用 ajax 调用加载初始块 以便我可以加载时显示进度 https stackov
  • javascript onclick 进入新窗口

    这是我的代码
  • 我将 X Y Z 坐标转换为屏幕 X Y 坐标有什么问题吗?

    我正在制作 3D 空间中弹跳的球体的 HTML5 Canvas 演示 这非常简单 每个球都有 X Y 和 Z 坐标 然后 这些坐标将转换为我在此处阅读的屏幕 X 和 Y 坐标 http answers google com answers
  • select 元素是否具有标准值属性?

    这是一个简单的问题 但我找不到任何参考资料 所以就在这里 假设我有一个选择元素
  • 替换打字稿中字符串中字符的所有实例?

    我正在尝试用 x 字符替换电子邮件中的所有句号 例如 电子邮件受保护 cdn cgi l email protection 将变为 myxemail emailxcom 电子邮件设置为字符串 我的问题是它不只是替换句号 而是替换每个字符 所
  • 如何在 JavaScript 中从代理对构造 UTF-16 字符?

    以下计算 Unicode 代码点的 UTF 16 代理对 戴着医用口罩的脸 https emojipedia org face with medical mask 但是如何从代理对构造字符以在字符串中使用呢 const codepoint
  • Skrollr 添加空白

    我已经尝试了一切 我在谷歌上阅读了 4 5 页试图找到适合我的修复程序 已经筋疲力尽了 即使我使用 skrollr 示例 我的问题仍然存在 不是说他们做错了什么 我知道我只是没有正确理解它 因此 我上传了一个演示 仅在移动设备上展示这个尴尬
  • 使用 Javascript 检测 Pepper (PPAPI) Flash

    我们使用的是专有的文档查看器 它与某些 Chrome 版本中的 Pepper 版本的 Flash 配合得不太好 所以我希望能够检测到它并重定向到不同格式的相同内容 由于这个版本似乎落后于 NPAPI 版本 所以我一直在使用闪光检测 http
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM

随机推荐

  • MongoDB 在不知道键的情况下搜索嵌套对象

    我有一个对象列表 由于使用异步 Java 驱动程序 BSON 这些对象被赋予了一些任意的对象键 我的问题是这样的jobStatuses是字典项的任意列表 我不知道其中的键 我不知道如何访问其子值 最后 我尝试构建一个查询 返回 if ANY
  • 如何将源代码附加到 Eclipse 中的项目库中?

    我在 Eclipse 中创建了一个简单的独立 Spring 应用程序作为Java应用程序 并且不使用 Maven 或 gradle 我手动下载了所需的 Spring 框架 jar 应用程序运行良好 现在 我想调试代码并查看 Spring 源
  • java.lang.ClassNotFoundException: org.hibernate.bytecode.instrumentation.internal.FieldInterceptionHelper

    在我的 Spring MVC 应用程序上验证实体 插入之前 期间 出现以下错误 at io undertow server Connectors executeRootHandler Connectors java 202 at io un
  • LifecycleRegistry 在 MVP 架构的 BaseActivity 中未初始化

    我为我的 Activity 和 Fragment Presenter ViewHolder 和 ViewModel 定义了几个基类 并定义了一个接口和 Presenter 继承这些基类的所有其他活动 在我的 BaseActivity 类和
  • 从数据库中连续传输随机音频

    我正在计划一个非常简单的音频流媒体项目 它将获取本地服务器上托管的 mysql 数据库歌曲列表 然后全天不断地从列表中随机播放一首歌曲 这将附加到一个非常简单的前端页面 该页面将显示当前播放歌曲的名称 我知道如何从数据库获取随机文件并使用
  • 如何从google home的语音匹配配置文件中获取用户的唯一身份?

    我想在 Google Home 上开发一个应用程序 操作 它将向用户返回一些机密信息 因此 我无法根据帐户链接对用户进行身份验证 因为房间中的任何人都可以使用该设备 如何从语音匹配配置文件中获取用户的唯一身份 可能是电子邮件 ID 帐户链接
  • C# 表达式使用 Guid 书签

    我需要处理几个需要同步 备份的表 所有这些表的类都实现ITrackModifiedDate interface ITrackModifiedDate DateTime ModifiedDate get set 我需要分批完成这些工作 这意味
  • JavaScript:“Internet Explorer 限制此网页运行脚本或 ActiveX 控件”。

    每次我运行 IE 查看 JavaScript 程序时 都会显示 Internet Explorer 限制此网页运行脚本或 ActiveX 控件 和按钮 允许阻止的内容 当我单击它时 问题就解决了 但我每次都应该这样做 有谁知道我如何才能在
  • 创建“指数平滑”变量 - Pandas

    我有一个包含 ID 的数据框以及由这些 ID 做出的选择 替代方案 选择 集是一个整数列表 10 20 30 40 注意 使用此列表很重要 我们称之为 choice list 这是数据框 ID Choice 1 10 1 30 1 10 2
  • 检查计划任务的运行状况?

    我们最近遇到一个问题 即在 Windows 升级和 CF 服务器重新启动后 ColdFusion 计划任务无法恢复 有没有办法监控计划任务的运行状况 并在它们运行不正常时发出警报 或者我是否需要编写一个任务来解析日志文件以获取该信息 您可以
  • Python 中布尔值“and”、“or”的运算符方法有哪些? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 例如 这些定义在操作员模块可以这样使用 import operator print op
  • 这段代码的含义是什么? void (*signal(int sig, void (*func)(int)))(int);

    我遇到了这段代码 但完全迷失了它的含义 include
  • 防止文件现在可用弹出 Excel

    我这里有一个问题 我已经工作了几个小时了 我正在导入 Excel 文件 并使用以下代码来执行此操作 Dim objExcel As Excel Application Dim objWorkBook As Excel Workbook Di
  • 关于谷歌地点API

    我想知道的是使用Google Places API 基本上我想创建一个像 www zomato com 这样的网站 1 我可以像 Google 商家页面一样显示我所在城市的所有餐厅及其个人详细信息的列表吗 2 是否可以在 C net 中使用
  • Java 递归(?) 重复(?) 深度(?) 模式匹配

    我想得到ALL输入字符串中与给定模式匹配的子字符串 例如 给定字符串 aaxxbbaxb模式 a a z 0 3 b 我实际上想表达的是 所有以a开头 以b结尾的模式 但它们之间最多可以有2个字母 我想要的确切结果 及其索引 aaxxb 索
  • 使用 ToArgb() 后跟 FromArgb() 不会产生原始颜色

    这不起作用 int blueInt Color Blue ToArgb Color fred Color FromArgb blueInt Assert AreEqual Color Blue fred 有什么建议么 Edit 我正在使用
  • (PostgreSQL) 记录集中的实际记录数

    为了测试目的 我需要编写一个 SQL 查询 其中包含 结果集中作为列的实际记录数 如果我的 SELECT 得到 返回结果为 10 条记录 我需要一列 其中包含值 1 10 有没有办法在没有存储过程游标的情况下实现这一目标 我的数据 我在 P
  • 这是 C# 4 中动态绑定的漏洞吗?

    我看过一个非常有趣的帖子法比奥 莫洛的博客 如果您不想跳转到该网址 这是代码和错误 我定义了一个新的泛型类 如下所示 public class TableStorageInitializer
  • 迁移的 Iphone Build 无法连接到远程服务器

    将 worklight 6 1 项目迁移到 Mobile First 7 1 使用 IBM MobileFirst Platform Studio 7 1 0 00 20160801 2314 通过提供正确的服务器路径和上下文路径 构建应用
  • 如何从函数中多次产生值?

    所以我正在做的是 我有两个文件 一个包含一个将生成令牌的脚本 第二个文件处理该令牌 问题是 记录令牌的第二个脚本只会记录收到的第一个令牌 这就是我处理令牌的方式 const first file require first file js