promise - Elixir 对 Promise 或异步等待的回调
问题描述
我在 elixir 中有一个很长的函数,它有一个如下所示的回调
def outer_fn(param) do
doing_stuff()
very_long_sync_function(param, fn (result) ->
{:ok, short_fn(result)}
end)
end
Wherevery_long_sync_function
具有预期的特定返回类型outer_fn
。我想知道是否有可能以类似 javascript 的 promise 样式或更好的类似 async/await 的样式来重构代码,以及它会是什么样子。
解决方案
我无法从您的代码段中理解您到底想要实现什么,但我们有 Task.async/1
和Task.await/2
.
沿着这些思路应该做的事情:
def outer_fn(param) do
t = Task.async(fn ->
very_long_sync_function(param, fn (result) ->
{:ok, short_fn(objective_ids)}
end)
end)
doing_stuff()
Task.await(t)
end
Task.yield/2
允许对等待结果进行更精细的控制。
推荐阅读
- php - 我可以用函数结束 While 循环吗?
- python - 需要 Microsoft Visual C++ 14.0 - 错误 - pip install fbprophet
- python - 使用 pandas apply() 根据条件创建新列
- php - PHP - 字体回显问题
- php - Apache 和 IIS 之间的 PHP 脚本评估差异
- ubuntu - zfs ubuntu 18.04 上的 iozone 基准测试 - 错误:无法打开临时文件打开:无效参数
- apache - Apache 2.4.6 - ServerAlias 通配符,但 %1 未被替换
- scikit-learn - scikit-learn - 使用带有 RandomForestClassifier.predict() 的单个字符串?
- c# - 如何使用 API 在 Auth0 中验证以无密码身份验证发送的代码?
- sql - 使用声明的变量在 SQL Server 中运行演绎 CTE