问题标签 [ember-concurrency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
192 浏览

ember.js - ember并发,如何根据条件设置timeout值

我正在使用 ember-concurrency ,我必须每 10 秒调用一次 API 并更新我的应用程序安装阶段的设置状态。如果有错误,那么我需要超时值为 1 秒,而不是默认值为 10 秒。似乎每次超时值仅为 10 秒,即使出现错误,用户在屏幕上停留 10 秒,然后看到错误模式。谁能告诉什么是可能的解决方案?或者我做错了什么?

0 投票
2 回答
695 浏览

javascript - 从触发的动作运行 Ember.run.later

我在 Ember 控制器中的操作处理有问题。在 hbs 中单击编辑按钮后,我想连续运行某些功能。我已经尝试过这样的操作。

这是对动作someChangingValue变化做出反应的函数。

但这只运行functionThatIsRunningEachTwoSeconds一次。还尝试了更改someChangingValuefalseiftrue和 else 的相同功能,这使我陷入了观察属性的无限循环。

谢谢!

0 投票
0 回答
174 浏览

typescript - 如何键入装饰器更改类型的装饰属性?

下面是一些在 JS 中完美运行的代码:

Ember Concurrency 是 promise 的替代方案,它允许取消和管理它们,类似于来自 RxJS 的 Observable。由于 JS 承诺不允许取消,Ember Concurrency 使用yield而不是async/ await

上面使用的task装饰器将生成器函数转换为TaskProperty具有.perform()方法的实例。

请注意,虽然很奇怪,但这种模式已经证明了它在非类型化 JS 应用程序中的便捷性和可靠性。

但是输入它是一个挑战。


这里是

这些类型不是官方的,可以自定义。


我很难正确输入最上面的代码示例。

我得到的错误是:

perform类型上不存在属性() => IterableIterator<any>

这是可以理解的,因为fetchRecord被定义为生成器。

此外,TypeScript官方不支持改变装饰属性类型的装饰器。

所以问题是:如何绕过限制并键入这样的装饰器而不恢复到@ts-ignore

除了键入fetchRecord属性之外,我还想正确键入我传入this.fetchRecord.perform()并由生成器接收的参数。

谢谢你。^__^

0 投票
1 回答
469 浏览

ember.js - 我们不能在 glimmer 组件 getter 中放置一个 ember 并发任务,它正在跟踪组件参数

-- 当一个 ember 并发任务被称为 glimmer components getter 时,它会无限循环运行。

用户表.hbs

上面的组件在模板中的某处被调用并传递帐户和页面动态。

注意:它在无限循环中运行。

0 投票
1 回答
450 浏览

ember.js - 在 Emberjs 中的路由器中进行轮询的有效策略是什么?

我需要帮助来制定一个好的路由器轮询策略。queries/:query_id/results/:result_id每当用户执行查询时,我都会转换到一条路线。在这个我的路线中,我需要加载两件事:result与此路线关联的模型和table使用结果模型中的 url 的对象。问题是,如果查询长时间运行,我需要轮询并询问服务器查询是否完成。只有这样我才能下载表格。我正在使用 ember 并发进行所有轮询,除了一个小的边缘情况外,它工作得很好。这种边缘情况与以下事实有关:如果我的轮询函数在完成后被取消并且在下载表时被取消,那么它会卡住说“正在加载表”,因为它只在查询状态时触发轮询没有完成。表的下载发生在轮询函数内部,但仅在查询完成时进行。我正在结果路径中加载所有数据,所以也许有人可以提供一些替代方案来做到这一点。我还需要提一下,每个表都将显示在单独的选项卡(引导选项卡)中。因此,当我在选项卡之间切换时,我想尽量减少获取表格的次数(为什么我将其推送到商店),因为每个选项卡都是指向新结果路由的链接。

结果路由中的相关代码

主意

一个想法可能是创建一个单独的路径来加载表queries/:query_id/results/:result_id/:table_id,即只有在查询完成后才转换到这个路径。从那里我可以安全地加载桌子。我唯一遇到的问题是结果路由将只涉及加载结果。在结果路由中将不会呈现任何组件;仅在表路由中。

0 投票
1 回答
511 浏览

javascript - 单元测试 ember 并发任务和产量

由于 ember 并发任务,我们的项目中有很多代码没有被覆盖。

是否有一种直接的方法对包含以下内容的控制器进行单元测试:

0 投票
1 回答
529 浏览

ember.js - Ember 并发超时挂在 qunit

在 Ember 中,我有一个组件可以启动永无止境的轮询以保持一些数据是最新的。像这样:

这会导致预先存在的验收测试卡在此任务中并永远运行,即使它应该异步运行。测试看起来像这样:

起初我以为我嘲笑了这个请求是错误的,并且测试只是超时了,但实际上它是正确地轮询数据。删除此任务使验收测试正常完成。

手动测试似乎工作正常,没有任何卡住。为什么会发生这种情况,解决这个问题的正确方法是什么?

看到单元测试 ember-concurrency 任务和产量,但它并没有真正帮助,因为它只处理单元测试。

0 投票
0 回答
141 浏览

ember.js - 升级到 ember 3.15 后,产生承诺的助手将无限重新计算

我无法解决这个错误,但是当我从 3.13 升级到 3.15 时发生了一些事情。在某些(但不是全部)模板中,我在 let 块中使用助手的结果,助手将被无限重新渲染。

如果我不对数据做任何事情,那很好。一旦我尝试将数据用于任何事情,它就会爆炸。具体来说,我有关于 Promise 和并发任务的麻烦示例。它们非常融入我的框架,因此很难一次将它们分解出来。我将不得不为此努力。

我已经看到了过去由于以下错误而发生这种情况的示例:

https://github.com/emberjs/ember.js/issues/14351

我还阅读了有关修改助手参数从而导致重新渲染的助手。但我很确定我检查得很好,这不是问题。

浏览器会慢到爬行,如果我将 console.log('hi') 语句放在助手的计算函数中,我会看到数千个'hi'。所以我知道它被一遍又一遍地调用

我知道这不是一个非常完整的问题,但我现在陷入困境,这是我能找到的最好的。

在我的应用程序的辛烷化过程中是否会发生任何可能导致这种情况发生的事情?

编辑---更多信息

这是我的助手的基本版本,被一遍又一遍地调用。“field”是一个保存模型信息的 EmberObject - 在这种情况下是字段的可用值。

可用值是

逻辑是对的。如果我把它放在一个计算属性中它工作正常。

帮助器在这样的模板中使用:

如果我省略了日志,它可以正常工作,但实际上并没有被调用,所以......那又怎样:-/

我尝试将帮助程序设为函数而不是类,并且尝试将“存储”的范围更改为具有相同结果的组件。我一直在堆栈中确保@'s 和 this's 等也是正确的,以防它是名称/范围混淆的问题。如果它吞下了一个错误,那么我不知道为什么它会作为组件上的 cp 工作 - 显然这是另一种失败模式。

而这只是一个帮手。我有另一个返回任务,它正在做同样的事情。尽管我使用了几乎所有的设计模式,但我从未选择过任何 Octane 行为:尖括号语法、本机类、异步/等待等。我在 3.13 上,当我转到 3.15 时,这弹出了。就像我说的,如果我将帮助程序输出定义为组件上的 cp,那么它可以工作,所以这就是“解决方法”。我不禁觉得我偶然发现了一些奇怪的失败模式,或者我的配置被抬高了,其中一些包装器正在“辛烷值方式”和其他“旧方式”中做事。

有一次我在控制台中看到来自“存储”的不同跟踪,它说在调用 findAll 期间超出了最大堆栈级别。它确实导致我对我的机器进行了硬重置,所以我无法保存它。我应该用手机拍张照片的。有一句关于“可追踪”的说法。我不记得它说了什么。但是看着它让我想知道是否因为对“store”的引用是一个闭包,它是否试图跟踪对没有值上下文的值的更改。我对所有这些是如何工作的并不是很熟悉,但是当我认为我所做的只是一个非常简单的方法应用程序时,我觉得看到那个调用很奇怪。

0 投票
1 回答
428 浏览

javascript - Ember.JS 并发任务,perform() 不是函数

我试图将功能转换为任务。这是原始代码:

称呼:

功能:

我一直在遵循实施 Ember 任务的结构。它全部编译没有问题,但是当它被调用时,它输出 this.socketConnect(...) 不是一个函数。之前我没有下面的返回,它输出 this.socketConnect 不是一个函数。这是我当前的任务代码。

进口:

称呼:

功能:

对此很陌生,所以我猜我缺少一些小东西。它与其他用途相匹配。另外,是否有人可以帮助将 websocket 生成功能切换为任务的好处?任何帮助将不胜感激,谢谢。

0 投票
1 回答
100 浏览

javascript - 产生不停止 ember 并发任务中的流程

第二个块在 Promise 运行并且我收到错误时运行。在承诺得到解决之前,它不应该停止流程吗?

承诺运行良好,下次可以使用