问题标签 [r-promises]

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 回答
38 浏览

r - 如何实际调用承诺?

我在看promises,但我不知道如何真正让承诺做任何事情。所有可用的阻塞机制(如promise_all)都返回一个承诺,而且似乎没有明显的方法让承诺首先执行。例如,给定以下代码片段:

我如何实际调用承诺链?

奇怪的是,如果我将第一个承诺更改为 afuture_promise并添加一个运行循环,如

承诺链正确执行。但是,这不适用于常规承诺。

我错过了什么?看来系统缺少执行者,但是我在哪里获得执行者?我在包本身中看不到任何内容,并且没有用户可见的 API 用于查询我可以看到的承诺。

0 投票
1 回答
81 浏览

r - 为什么 withr::with_seed 和 R.utils::withSeed 在异步代码中使用时会产生不同的结果?

我正在尝试使用 R 学习异步编程,以便我可以实现一个需要生成具有指定种子的随机数(始终具有指定种子)的应用程序。我一直在使用R.utils::withSeed它,但我知道它withr::with_seed也存在,所以我想我可以检查一下。

我知道随机数生成很棘手,所以我一直在尝试运行简单的示例来尝试了解事情是如何工作的。我需要:

  • ...使用相同的种子时总是得到相同的随机数
  • ...无论我是否使用异步框架,都可以使用相同的种子获得相同的随机数(因此我应该能够在 Promise 之外运行代码并获得相同的答案)

在下面的代码中,我定义了两个函数来生成随机数,使用withr::with_seed或设置种子R.utils::withSeed

  • 当在 promise 之外运行时,这两个函数给了我相同的答案。
  • 这两个函数在 Promise 中运行时给出不同的答案。
  • withr::with_seed版本在承诺内部或外部给出了相同的答案。
  • R.utils::withSeed版本在承诺内部或外部给出了不同的答案。

然而,答案似乎在多次运行中是一致的。

我的问题是:为什么?这是一个错误R.utils::withSeed,还是我误解了什么?


代码

0 投票
1 回答
254 浏览

r - 闪亮的应用程序下载按钮和future_promise:enc2utf8 中的错误:参数不是字符向量

我正在尝试以闪亮的方式创建下载处理程序,但使用 future_promise() 因为写入文件可能需要一些时间。这是我想做的一个工作示例,但不使用异步框架:

一个正常工作的 .Rmd 闪亮应用程序:当您单击按钮时,它会将 10 个随机偏差写入文件并将其作为下载提供。我添加了 5 秒的延迟。

我正在尝试使用 future_promise 在异步框架中实现这一点。这是 {future}/{promises} 版本:

当我在 Firefox 中单击按钮时,我没有得到任何文件,在 R 控制台中,显示如下:

经过一些调试后,我相信会发生这种情况,因为无论运行下载处理程序的什么都在运行该filename函数,期待一个字符向量,并获得一个承诺。但我不确定如何解决这个问题。

我看到了这个问题,其中提问者似乎有同样的问题,但没有提供解决方案(他们的例子不可复制)。

我怎样才能解决这个问题?

0 投票
1 回答
56 浏览

r - 在反应式 R 中使用 future 和 promise

我有一个关于 R Shiny 的问题,尤其是关于提高我的 Shiny 应用程序性能的方法。我正在使用一些需要很长时间才能运行的 SQL 查询以及一些需要时间才能显示的情节。我知道可以使用futurepromises但我不知道如何在反应式表达式中使用它们。

我在下面向您展示一个非常简单的示例:

在这种情况下,我们可以看到应用程序在显示整个应用程序之前等待绘图部分结束计算。但是,即使带有绘图的部分尚未完成计算,我也希望显示数据表。

非常感谢您的帮助!

0 投票
0 回答
42 浏览

r - 如何在 R 管道工中将 future_promise 与 memoise 结合起来

我正在使用 R 包制作 API plumber。这个 API 中的一些端点会从记忆化中受益,所以我也使用了这个memoise包。将两者结合起来非常简单,如本博文所示。我将在这篇文章的示例上建立我的代表。


所以现在,我想让我的 API 能够处理并发调用。为此,我将使用该promises包,如本博文中所示。结合plumber起来promises也很简单:

我重新启动 API,然后我可以调用这个新端点:


现在我想添加一个混合所有内容的端点(plumbermemoisepromises

我重新启动 API,然后调用它:


我试图与future_promise's 的envir论点混在一起,但没有成功。我也试过这个:

我重新启动 API,然后调用它:

它返回正确的结果,并且该部分按预期工作(在端点调用中future_promise添加 10s 后我可以看到,然后从另一个 R 会话调用另一个端点),但该部分似乎不起作用(我可以看到在函数中添加 10s后,两次调用最后一个端点并不会使其更快)。Sys.sleepfuture_promisefuture_promisememoiseSys.sleepadd

编辑:如果我将它与文件系统记忆结合起来,这个解决方案似乎有效:

但它看起来确实不是一个干净的解决方案。


因此,由于这是一篇很长的帖子,我会清楚地说明我的问题,以防我失去你:
有没有一种干净的方式来组合memoise::memoisepromises::future_promiseplumber端点内?

0 投票
0 回答
23 浏览

r - 带有回调函数的后台while循环

我希望在 R 中实现以下模式,但运气不佳:

后台作业(无限 while 循环)将轮询 API 以检索检索结果。此函数必须将结果传递回主 R 会话。我最初认为这可能是一个函数,一旦将结果分配给全局变量,就会递归调用自身(这可能是错误的方法):

从 API 检索消息后,将生成一个长时间运行的数据处理任务(这可能需要 10 到 20 秒之间的任何时间)。我还没有完全弄清楚的一件事是如何在不同的 R 进程之间传递数据,我想像 Redis 这样的东西或者svSocket需要参与。

现在,棘手的一点是让 API 知道(不时地)数据处理仍在积极进行,以避免重新发送消息。

0 投票
0 回答
16 浏览

javascript - 承诺和同步代码的输出不清楚

此块的输出为 1,2,3,4,7,5,6

我确实明白,promise 回调将进入事件循环,并在 promise 解决后运行,然后我们如何在 promise 解决之前打印 2、3。有人可以向我解释一下吗?